2013-08-07 139 views
6

在下面的例子:R + Hadoop:如何從HDFS讀取CSV文件並執行mapreduce?

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

用於映射縮減功能的數據輸入是一個命名對象small.ints其中refered到塊HDFS。

現在我已經存儲在HDFS作爲

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

如何獲得它的對象的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輸入,而內部map函數做的是from.dfs()的東西,我是能夠獲得數據塊?

請給我一些建議,不管!

回答

3

映射精簡(輸入=路徑,input.format = make.input.format(...),地圖...)

from.dfs爲小的數據。在大多數情況下,您不會在map函數中使用from.dfs。這些參數保持輸入數據已經

+0

哦,我沒有注意到,我可以把輸入格式中的MapReduce()說法​​!我讀了你的wiki,其中說to.dfs和from.dfs僅用於小數據和測試。感謝您的幫助! –