我试图从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")
答案 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"))
我还在减少步骤中添加了总和值。