7

在以下示例中:

  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_short.csv文件很大,大约TB大小,内存无法容纳from的输出.dfs!!

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

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

4

2 回答 2

3

mapreduce(输入 = 路径,input.format = make.input.format(...),地图 ...)

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

于 2013-08-07T06:07:32.147 回答
0

您可以执行以下操作:

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 文件中

于 2014-07-25T13:22:36.350 回答