2013-08-07 12 views
6

W poniższym przykładzie:R + Hadoop: Jak odczytać plik CSV z HDFS i wykonać mapreduce?

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

dane wejściowe dla funkcji mapreduce jest obiekt nazwany small.ints które skieruję do bloków w HDFS.

Teraz mam już plik CSV zapisany w HDFS jak

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

Jak uzyskać obiekt dla niego?

I o ile wiem (co może być nie tak), jeśli chcę danych z pliku CSV jako dane wejściowe dla mapreduce, muszę najpierw wygenerować tabelę w R, która zawiera wszystkie wartości w pliku CSV. Muszę metody jak:

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

Wydaje się OK, aby korzystać z tej metody, aby uzyskać mydata, a następnie wykonaj Object = to.dfs (mydata), ale problemem jest to plik test_short.csv jest ogromny, co jest około rozmiaru TB, a pamięć nie może przechowywać danych wyjściowych od.dfs !!

Właściwie, zastanawiam się, czy użyję "hdfs: //172.16.1.58: 8020/tmp/test_short.csv" jako bezpośrednio wejście mapreduce, a funkcja mapy wewnętrznej zrobi coś z ..dfs(), czy ja? w stanie uzyskać bloki danych?

Proszę, daj mi radę, cokolwiek!

Odpowiedz

3

mapreduce (wejście = ścieżka, input.format = make.input.format (...), mapy ...)

from.dfs jest dla małych danych. W większości przypadków nie użyjesz funkcji ..dfs w funkcji mapowania. Argumenty przytrzymać część danych wejściowych już

+0

Och, ja nie zauważyłem mogę umieścić format wejściowy w MapReduce() Argument! Czytałem twoje wiki, które mówi, że do.dfs i from.dfs są używane tylko dla małych danych i testowania. Dziękuję za pomoc! –

Powiązane problemy