Могу ли я использовать 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"))

Я также добавил в шаге сокращения, чтобы суммировать значения.

Другие вопросы по тегам