我试图从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")发布于 2015-07-23 11:20:08
不是这样的-映射函数期望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"))我还添加了一个reduce步骤,对这些值求和。
https://stackoverflow.com/questions/31466632
复制相似问题