繁体   English   中英

R + Hadoop:如何从HDFS读取CSV文件并执行mapreduce?

[英]R+Hadoop: How to read CSV file from HDFS and execute mapreduce?

在以下示例中:

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

mapreduce函数的数据输入是一个名为small.ints的对象,它引用了HDFS中的块。

现在我有一个已经存储在HDFS中的CSV文件了

"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,然后执行object = to.dfs(mydata),但问题是test_short.csv文件很大,大约是TB大小,而内存不能保存输出.dfs!

实际上,我想知道我是否直接使用“hdfs://172.16.1.58:8020 / tmp / test_short.csv”作为mapreduce输入,而在map函数内部执行from.dfs()的事情,我能否获取数据块?

无论如何,请给我一些建议!

mapreduce(input = path,input.format = make.input.format(...),map ...)

from.dfs用于小数据。 在大多数情况下,您不会在map函数中使用from.dfs。 参数已经包含一部分输入数据

您可以执行以下操作:

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

请给出积分,希望有人发现它有用。

注意:有关详细信息,请参阅stackoverflow帖子:

如何将HDFS文件输入R mapreduce进行处理,并将结果输入HDFS文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM