如何使用R mapreduce对训练数据集进行降维?

时间:2014-07-21 11:41:36

标签: r mapreduce hdfs rhadoop

我正在使用RHadoop rhdfs包来对具有大量列的CSV输入文件执行降维。输出将是所有列的选定子集。为简单起见,我想尝试只获取CSV文件的前5列。

我正在尝试应用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类标签列减少到减少的预测变量,最后将减少的训练数据集存储到hdfs中。

现在我将hdfs文件存储在名为local.matrix的本地矩阵中,这需要我将整个文件存储在内存中。有没有办法可以使用

绕过内存中local.matrix

to.dfs(local.matrix)然后将local.matrix的HDFS存储位置hdfsWritePath传递到transfer.csvfile.hdfs.to.hdfs.reduced function

0 个答案:

没有答案