복붙노트

[HADOOP] R + Hadoop : HDFS에서 CSV 파일을 읽고 mapreduce를 실행하는 방법은 무엇입니까?

HADOOP

R + Hadoop : HDFS에서 CSV 파일을 읽고 mapreduce를 실행하는 방법은 무엇입니까?

다음 예제에서 :

  small.ints = to.dfs(1:1000)
  mapreduce(
    input = small.ints, 
    map = function(k, v) cbind(v, v^2))

mapreduce 함수의 데이터 입력은 small.ints라는 객체이며 HDFS의 블록을 참조합니다.

이제 CSV 파일을 HDFS에 이미 저장했습니다.

"hdfs://172.16.1.58:8020/tmp/test_short.csv"

그것을 위해 객체를 얻는 방법?

그리고 내가 아는 한 (잘못된 것일 수도 있습니다.) CSV 파일의 데이터를 mapreduce의 입력으로 사용하려면 먼저 CSV 파일의 모든 값을 포함하는 R 테이블을 생성해야합니다. 나는 다음과 같은 방법을 가지고있다.

data=from.dfs("hdfs://172.16.1.58:8020/tmp/test_short.csv",make.input.format(format="csv",sep=","))
mydata=data$val

이 방법을 사용하여 mydata를 얻은 다음 object = to.dfs (mydata)를 수행하는 것으로 보이지만 문제는 test_short.csv 파일이 TB 크기 인 거대한데 메모리가에서 출력을 보관할 수 없다는 것입니다. .dfs !!

사실, "hdfs : //172.16.1.58 : 8020 / tmp / test_short.csv"를 mapreduce 입력으로 직접 사용하고 map 함수 내부에서 from.dfs ()를 수행하면 데이터를 가져올 수 있는지 궁금합니다. 블록?

어떤 조언을 해주세요.

해결법

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

    1.mapreduce (input = path, input.format = make.input.format (...), map ...)

    mapreduce (input = path, input.format = make.input.format (...), map ...)

    from.dfs는 작은 데이터 용입니다. 대부분의 경우 map 함수에서 from.dfs를 사용하지 않습니다. 인수는 입력 데이터의 일부를 이미 보유합니다.

  2. ==============================

    2.다음과 같이 할 수 있습니다.

    다음과 같이 할 수 있습니다.

    r.file <- hdfs.file(hdfsFilePath,"r")
    from.dfs(
        mapreduce(
             input = as.matrix(hdfs.read.text.file(r.file)),
             input.format = "csv",
             map = ...
    ))
    

    포인트를주고 누군가가 유용하다고 생각하기를 바랍니다.

    참고 : 자세한 내용은 stackoverflow 게시물을 참조하십시오.

    R mapreduce에 HDFS 파일을 입력하여 처리하고 결과를 HDFS 파일로 가져 오는 방법

  3. from https://stackoverflow.com/questions/18093107/rhadoop-how-to-read-csv-file-from-hdfs-and-execute-mapreduce by cc-by-sa and MIT license