2016-07-06 1 views
2

폴더가있는 디렉토리가 있고 각 폴더에는 압축 된 JSON 파일 (.gz)이 있습니다.S3에서 Json 파일을 읽는 가장 빠른 방법은 다음과 같습니다. Spark

val df = sqlContext.jsonFile("s3://testData/*/*/*") 
df.show() 

예 : 현재 내가 좋아하는 일을 오전

testData/May/01/00/File.json.gz 

각 압축 파일에 대한 11기가바이트 (17)이다.

나는이 :

  1. 마스터 : 1 c3.4xlarge
  2. 코어 : 19 c3.4xlarge
  3. 스파크 1.5.2
  4. EMR-4.2.0

압축 된 파일에는 여러 개의 json 개체/파일이 있습니다. 이 프로세스는 방금 읽는 데 막대한 시간이 걸립니다 (위의 두 문장 만). 이 작업을 수행하는 더 빠른 방법이 있습니까? 스키마는 복잡하지 않습니다. 데이터 집합을 분석하기 위해 몇 가지 쿼리를 작성할 계획입니다. 하지만 s3에서 데이터를 읽는 데 걸리는 시간이 걱정됩니다.

최대로드는 10TB가 될 수 있습니다. 캐시를 사용하여 나중에 쿼리를 처리 할 계획입니다.

+3

http://tech.kinja.com/how-not-to-pull-from-s3-using-apache-spark-1704509219 – zero323

답변

2

JSON이 균일하게 구성되어 있다면 JSON 파일에 대한 스키마를 Spark에 제공하는 것이 좋습니다. 이렇게하면 처리 속도가 엄청나게 빨라집니다.

스키마를 제공하지 않으면 Spark는 파일의 모든 행을 먼저 읽고, 관찰 한 것처럼 어느 정도 시간이 걸릴 수있는 스키마를 추정합니다. 난 (이 때

val df = sqlContext.jsonFile("s3://testData/*/*/*", mySchema) 

: 다음 http://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema

당신은 단지 당신이 jsonFile 호출에 생성 된 스키마를 추가해야 할 것 :

하는 스키마를 만드는 방법은이 문서를 참조하십시오 Spark 1.6.2를 사용하면) jsonFile이 더 이상 사용되지 않는 것처럼 보이므로 sqlContext.read.schema(mySchema).json(myJsonRDD) ( myJsonRDDRDD[String] 임)으로 전환하는 것이 좋습니다.

+0

스키마를 작성하여 스키마를 작성하면 파일, 내 쿼리는 44 초에서 47 초를 실행하는 데 사용되었습니다. 그 당시 클러스터의 부하에 대해 혼동을 줄 수있는 변수가있을 수 있지만, 너무 오래 걸리는 것이 흥미로 웠습니다. 스파크 버전 1.5.1을 실행 중입니다. – satoukum

+1

최신 버전의 Spark를 사용하는 경우'sqlContext.jsonFile ("...")'은 더 이상 사용되지 않습니다. 대신에'sqlContext.read.json ("...")'를 사용하십시오. – ADAM

관련 문제