복붙노트

[HADOOP] Rhadoop - rmr을 사용한 단어 수

HADOOP

Rhadoop - rmr을 사용한 단어 수

Rhadoop 패키지를 사용하여 간단한 rmr 작업을 실행하려고하는데 작동하지 않습니다. 여기에 내 R 스크립트가 있습니다.

print("Initializing variable.....")
Sys.setenv(HADOOP_HOME="/usr/hdp/2.2.4.2-2/hadoop")
Sys.setenv(HADOOP_CMD="/usr/hdp/2.2.4.2-2/hadoop/bin/hadoop")
print("Invoking functions.......")
#Referece taken from Revolution Analytics
wordcount = function(    input,     output = NULL,     pattern = " ")
{
mapreduce(
      input = input ,
      output = output,
      input.format = "text",
      map = wc.map,
      reduce = wc.reduce,
      combine = T)
}

wc.map =
      function(., lines) {
        keyval(
          unlist(
            strsplit(
              x = lines,
              split = pattern)),
          1)}

wc.reduce =
      function(word, counts ) {
        keyval(word, sum(counts))}

#Function Invoke

wordcount('/user/hduser/rmr/wcinput.txt')

나는 위의 스크립트로 실행 중이다.

Rscript wordcount.r

오류가 발생했습니다.

[1] "Initializing variable....."
[1] "Invoking functions......."
Error in wordcount("/user/hduser/rmr/wcinput.txt") :
could not find function "mapreduce"
Execution halted

친절하게 문제가 무엇인지 알려주세요.

해결법

  1. ==============================

    1.먼저 코드에서 HADOOP_STREAMING 환경 변수를 설정해야합니다.

    먼저 코드에서 HADOOP_STREAMING 환경 변수를 설정해야합니다.

    아래 코드를 시도해보고 코드에서 hdfs 폴더 examples / wordcount / data에 텍스트 파일을 복사했다고 가정합니다

    Sys.setenv("HADOOP_CMD"="/usr/local/hadoop/bin/hadoop")
    Sys.setenv("HADOOP_STREAMING"="/usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar")
    
    # load librarys
    library(rmr2)
    library(rhdfs)
    
    # initiate rhdfs package
    hdfs.init()
    
    map <- function(k,lines) {
      words.list <- strsplit(lines, '\\s')
      words <- unlist(words.list)
      return( keyval(words, 1) )
    }
    
    reduce <- function(word, counts) {
      keyval(word, sum(counts))
    }
    
    wordcount <- function (input, output=NULL) {
      mapreduce(input=input, output=output, input.format="text", map=map, reduce=reduce)
    }
    
    ## read text files from folder example/wordcount/data
    hdfs.root <- 'example/wordcount'
    hdfs.data <- file.path(hdfs.root, 'data')
    
    ## save result in folder example/wordcount/out
    hdfs.out <- file.path(hdfs.root, 'out')
    
    ## Submit job
    out <- wordcount(hdfs.data, hdfs.out) 
    
    ## Fetch results from HDFS
    results <- from.dfs(out)
    results.df <- as.data.frame(results, stringsAsFactors=F)
    colnames(results.df) <- c('word', 'count')
    
    head(results.df)
    
    word count
      AS    16
      As     5
      B.     1
      BE    13
      BY    23
      By     7
    

    참조 용으로 R 워드 카운트 맵 축소 프로그램을 실행하는 또 다른 예제가 있습니다.

    희망이 도움이됩니다.

  2. from https://stackoverflow.com/questions/30261383/rhadoop-wordcount-using-rmr by cc-by-sa and MIT license