2

HDFS からテキストまたは gz ファイルを読み取って、単純な mapreduce ジョブ (実際にはマップ ジョブのみ) を実行しようとしていますが、readLines 部分が機能していないように見えるエラーが発生しました。mapreduce で readLines 関数を使用できるかどうかの回答を求めています。ps。mapreduce ジョブの外部で readLines 関数を使用して 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")
4

1 に答える 1

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"))

値を合計するために、reduce ステップも追加しました。

于 2015-07-23T03:20:08.203 に答える