我可以在Rhadoop的mapreduce作业中使用readLines吗?

时间:2015-07-17 00:19:24

标签: r rhadoop

我试图从HDFS读取文本或gz文件并运行一个简单的mapreduce作业(实际上只是地图作业),但是看起来像readLines部分不起作用的错误。我正在寻找能否在mapreduce中使用readLines函数的答案。 PS。如果我只使用readLines函数来解析mapreduce作业之外的HDFS文件就没有问题。感谢。

counts <- function(path){
        ct.map <- function(., lines) {
        line <- readLines(lines)
        word <- unlist(strsplit(line, pattern = " "))
        keyval(word, 1)
    }

    mapreduce(
    input = path,
    input.format = "text",
    map = ct.map
        )
}
counts("/user/ychen/100.txt")

1 个答案:

答案 0 :(得分:0)

不是那样 - 映射函数需要dfs格式的数据。 您可以像这样重写您的函数,在输入步骤中进行格式化:

counts <- function(path){
  ct.map <- function(.,line) {
    word <- unlist(strsplit(line, split = " "))
    keyval(word, 1)
  }

  mapreduce(
    input = to.dfs(readLines(path)),
    map = function(k,v){ct.map(k,v)},
    reduce = function(k,v){keyval(k,length(v))}
  )
}
output<-from.dfs(counts("/user/ychen/100.txt"))

我还在减少步骤中添加了总和值。