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
?