r+hadoop:如何从hdfs读取csv文件并执行mapreduce?

mo49yndu  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(708)

在以下示例中:

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

mapreduce函数的数据输入是一个名为small.ints的对象,它引用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,然后执行object=to.dfs(mydata),但问题是test\u short.csv文件很大,大约是tb大小,内存无法容纳from.dfs的输出!!
事实上,我想知道我是否使用“hdfs://172.16.1.58:8020/tmp/test\u short.csv“作为mapreduce的直接输入,在map函数中执行from.dfs()操作,我能得到数据块吗?
不管怎样,请给我一些建议!

xcitsw88

xcitsw881#

mapreduce(input=path,input.format=make.input.format(…),map…)
from.dfs用于小数据。在大多数情况下,不会在map函数中使用from.dfs。参数已经保存了部分输入数据

jaxagkaj

jaxagkaj2#

您可以执行以下操作:

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

请给分,希望大家觉得有用。
注:有关详细信息,请参阅stackoverflow post:
如何将hdfs文件输入到r mapreduce中进行处理,并将处理结果输入到hdfs文件中

相关问题