[HADOOP] R + Hadoop : HDFS에서 CSV 파일을 읽고 mapreduce를 실행하는 방법은 무엇입니까?
HADOOPR + 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.mapreduce (input = path, input.format = make.input.format (...), map ...)
mapreduce (input = path, input.format = make.input.format (...), map ...)
from.dfs는 작은 데이터 용입니다. 대부분의 경우 map 함수에서 from.dfs를 사용하지 않습니다. 인수는 입력 데이터의 일부를 이미 보유합니다.
-
==============================
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 파일로 가져 오는 방법
from https://stackoverflow.com/questions/18093107/rhadoop-how-to-read-csv-file-from-hdfs-and-execute-mapreduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 튜플을 가방처럼 평평하게 만드십시오. (0) | 2019.08.04 |
---|---|
[HADOOP] NameNode 주소의 URI가 잘못되었습니다. (0) | 2019.08.04 |
[HADOOP] SOCKS 프록시를 통해 Hadoop을 사용하고 있습니까? (0) | 2019.08.04 |
[HADOOP] HDFS 파일 비교 (0) | 2019.08.04 |
[HADOOP] 하둡의 분산 캐시 수명 (0) | 2019.08.04 |