Как уменьшить размерность на обучающем наборе данных, используя 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
?