2013-08-07 9 views
6

Nel seguente esempio:R + Hadoop: come leggere il file CSV da HDFS ed eseguire mapreduce?

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

L'immissione dei dati per la funzione MapReduce è un oggetto denominato small.ints che refered file di HDFS.

Ora ho un file CSV già memorizzato in HDFS come

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

Come ottenere un oggetto per esso?

E per quanto ne so (che potrebbe essere errato), se voglio dati da file CSV come input per mapreduce, devo prima generare una tabella in R che contenga tutti i valori nel file CSV. Io ho metodo come:

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

Sembra OK per utilizzare questo metodo per ottenere mydata, e poi fare oggetto = to.dfs (mydata), ma il problema è il file test_short.csv è enorme, che è attorno alla dimensione della TB e la memoria non può contenere l'output di from.dfs !!

In realtà, mi chiedo se uso "hdfs: //172.16.1.58: 8020/tmp/test_short.csv" come input di ridimensionamento della mappa direttamente, e all'interno della funzione map do la cosa from.dfs(), sono io in grado di ottenere blocchi di dati?

Per favore, dammi un consiglio, qualunque cosa!

risposta

3

MapReduce (input = percorso, input.format = make.input.format (...), mappa ...)

from.dfs è per i piccoli dei dati. Nella maggior parte dei casi non userete from.dfs nella funzione map. Gli argomenti in possesso di una parte dei dati di input già

+0

Oh, non ho notato posso mettere il formato di input in MapReduce argomento()! Ho letto la tua wiki che diceva che to.dfs e from.dfs sono usati solo per piccoli dati e test. Grazie per l'aiuto! –