Могу ли я использовать readLines в работе mapreduce в Rhadoop?
Я пытаюсь прочитать текстовый или gz-файл из HDFS и запустить простое задание mapreduce (на самом деле только задание map), но получаю ошибку, которая выглядит так, будто часть readLines не работает. Я ищу ответы о том, могу ли я использовать функцию readLines в mapreduce. пс. нет проблем, если я просто использую функцию readLines для анализа файлов HDFS вне задания mapreduce. Благодарю.
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 ответ
Не так - функция отображения ожидает поступления данных в формате 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"))
Я также добавил в шаге сокращения, чтобы суммировать значения.