Как уменьшить размерность на обучающем наборе данных, используя R mapreduce?

Я работаю с пакетом RHadoop RHDFS для уменьшения размера входного файла CSV с большим количеством столбцов. Вывод будет выбранным подмножеством всех столбцов. Для простоты я пытаюсь взять только первые 5 столбцов файла CSV.

Я пытаюсь применить функцию mapreduce, чтобы выполнить уменьшение размеров с использованием инфраструктуры MR и использования хранилища HDFS вместо какой-либо обработки в памяти.

Мой код выглядит следующим образом:

transfer.csvfile.hdfs.to.hdfs.reduced =
                function(hdfsFilePath, hdfsWritePath, reducedCols=1) {
                        local.matrix = as.numeric()
                        hdfs.get(hdfsFilePath, local.Matrix, srcFS=hdfs.defaults("fs"))
                        transfer.reduced.map =
                                        function(.,M) {
                                                label <- M[,1]
                                                reduced.predictors <- M[,1:reducedCols]
                                                reduced.M <- cbind(reduced.predictors, label)
                                                keyval(
                                                     1,
                                                     as.numeric(reduced.M[,-1]))
                                        }
                         reduced.values =
                             values(
                                     from.dfs(
                                        mapreduce(
                                          local.matrix,
                                          map = function(.,M) {
                                                label <- M[,1]
                                                reduced.predictors <- M[,1:reducedCols]
                                                reduced.M <- cbind(reduced.predictors, label)
                                                keyval(
                                                     1,
                                                     as.numeric(reduced.M[,-1]))}
                        )))
                        to.dfs(reduced.values)
                }

Он принимает набор данных поезда со столбцами предикторов и столбцом меток в качестве последнего. Я пытаюсь уменьшить количество предикторов со 100 до 5 и cbind столбец метки класса для сокращенных предикторов и, наконец, сохранить набор сокращенных обучающих данных в формате hdf.

Прямо сейчас я храню файл hdfs в локальной матрице по имени local.matrix который понадобится мне для хранения всего файла в памяти. Есть ли способ, которым я могу обойти в памяти local.matrix используя

to.dfs(local.matrix) а затем передать хранилище HDFS для local.matrix как hdfsWritePath в transfer.csvfile.hdfs.to.hdfs.reduced function?

0 ответов

Другие вопросы по тегам