2013-08-07 4 views
6

В следующем примере:R + Hadoop: Как читать файл CSV из HDFS и выполнять mapreduce?

small.ints = to.dfs(1:1000) 
    mapreduce(
    input = small.ints, 
    map = function(k, v) cbind(v, v^2)) 

Входные данные для функции MapReduce является объектом, который назван small.ints refered к блокам в HDFS.

Теперь у меня есть файл CSV уже хранится в HDFS, как

"hdfs://172.16.1.58:8020/tmp/test_short.csv" 

Как получить объект для него?

И насколько я знаю (что может быть неправильно), если я хочу, чтобы данные из CSV-файла были введены для преобразования mapreduce, я должен сначала создать таблицу в R, которая содержит все значения в файле CSV. У меня есть метод, как:

data=from.dfs("hdfs://172.16.1.58:8020/tmp/test_short.csv",make.input.format(format="csv",sep=",")) 
mydata=data$val 

кажется ОК, чтобы использовать этот метод, чтобы получить MYDATA, а затем сделать объект = to.dfs (MyData), но проблема заключается в файл test_short.csv огромен, что вокруг размера TB, и память не может содержать вывод from.dfs !!

На самом деле, мне интересно, использую ли я «hdfs: //172.16.1.58: 8020/tmp/test_short.csv» как входной файл mapreduce, а внутренняя функция карты выполняет функцию from.dfs(), я в состоянии получить блоки данных?

Пожалуйста, дайте мне совет, что угодно!

ответ

3

MapReduce (вход = путь, input.format = make.input.format (...), карта ...)

from.dfs для небольших данных. В большинстве случаев вы не будете использовать from.dfs в функции карты. Доводы держать часть входных данных уже

+0

О, я не заметил, что я могу поместить формат ввода в MapReduce) аргумент (! Я прочитал вашу вики, в которой сказано, что .dfs и from.dfs используются только для небольших данных и тестирования. Спасибо за помощь! –

0

Вы можете сделать что-то, как показано ниже:

r.file <- hdfs.file(hdfsFilePath,"r") 
from.dfs(
    mapreduce(
     input = as.matrix(hdfs.read.text.file(r.file)), 
     input.format = "csv", 
     map = ... 
)) 

Пожалуйста, дайте очки и надеюсь, что кто-нибудь будет полезно.

Примечание: Для получения информации обратитесь к StackOverflow сообщение:

How to input HDFS file into R mapreduce for processing and get the result into HDFS file