[SCALA] JSON 파일이 아닌 폴더로 RDD 데이터를 저장하는 방법
SCALAJSON 파일이 아닌 폴더로 RDD 데이터를 저장하는 방법
나는 스트리밍 데이터 myDStream 내가 S3 (에 저장할 것을 (d 스트림 [문자열]) 수신하고 기본적으로,이 질문에 대해, 정확히 내가 출력을 저장할 할 경우 중요하지 않습니다,하지만 난 단지의 경우를 언급하고있다 ).
다음 코드는 잘 작동하지만, jsonFile - 19-45-46.json 같은 이름을 가진 폴더를 저장 한 다음이 저장 폴더 안에 _SUCCESS 및 부품-00000 파일.
이 저장 가능 각 RDD [문자열] (이 있습니다 JSON 문자열)을 JSON 파일이 아닌 폴더에 데이터를? 나는 다시 분할 (1)이 트릭을 할 줄 알았는데,하지만하지 않았다.
myDStream.foreachRDD { rdd =>
// datetimeString = ....
rdd.repartition(1).saveAsTextFile("s3n://mybucket/keys/jsonFile-"+datetimeString+".json")
}
해결법
-
==============================
1.AFAIK는 파일로 저장하는 옵션이 없습니다. 그것은 분산 처리 프레임 워크이고 그것은 좋은 연습 하나의 파일에 쓰기보다는 각 파티션은 지정된 경로에 자신의 파일을 작성 아니니까.
AFAIK는 파일로 저장하는 옵션이 없습니다. 그것은 분산 처리 프레임 워크이고 그것은 좋은 연습 하나의 파일에 쓰기보다는 각 파티션은 지정된 경로에 자신의 파일을 작성 아니니까.
-
==============================
2.rdd.collect.mkString 대안 ( "\ n")로서 당신은 그것의 위치에 일부-00000 파일을 이동하여 정리 출력에 파일 시스템 라이브러리를 하둡 사용할 수 있습니다. 코드 아래 로컬 파일 시스템 및 HDFS에 완벽하게 작동,하지만 난 S3와 테스트 드릴 수 없습니다 :
rdd.collect.mkString 대안 ( "\ n")로서 당신은 그것의 위치에 일부-00000 파일을 이동하여 정리 출력에 파일 시스템 라이브러리를 하둡 사용할 수 있습니다. 코드 아래 로컬 파일 시스템 및 HDFS에 완벽하게 작동,하지만 난 S3와 테스트 드릴 수 없습니다 :
val outputPath = "path/to/some/file.json" rdd.saveAsTextFile(outputPath + "-tmp") import org.apache.hadoop.fs.Path val fs = org.apache.hadoop.fs.FileSystem.get(spark.sparkContext.hadoopConfiguration) fs.rename(new Path(outputPath + "-tmp/part-00000"), new Path(outputPath)) fs.delete(new Path(outputPath + "-tmp"), true)
from https://stackoverflow.com/questions/40577546/how-to-save-rdd-data-into-json-files-not-folders by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 카프카 소비자는 이벤트를 반환하지 (0) | 2019.11.24 |
---|---|
[SCALA] 아파치 스파크 :하지 않을 때는 mapPartition 및 foreachPartition를 사용하는? (0) | 2019.11.24 |
[SCALA] 어떻게 요소의 액세스 스파크 RDD 배열에 인덱스를 기반으로 (0) | 2019.11.24 |
[SCALA] 스칼라에서 소거를 입력 (0) | 2019.11.24 |
[SCALA] 왜 스칼라에서 def``와`var`을 무시하는 것은 불가능? (0) | 2019.11.24 |