을 감안할 때 다음과 같은 파일 :스파크 그룹화 튜닝
- 직원
- 기술
- 보고서
- 등
및 다른 파일의 각 1 대이 N 관계, 예. 한 직원에게 여러 기술이 해당됩니다. 각 파일은 500MB에서 1.5GB 사이이며 합계로 약 10 개의 파일이 있습니다.
<employees>
<employee>
<skills>
<skill>...</skill>
<skill>...</skill>
...
</skills>
<reports
<report>...</report>
<report>...</report>
...
</reports>
...
</employee>
...
</employees>
내가 라인을 따라 뭔가를하고 있어요 : 는 각 직원, 나는/집계 (등 기술, 보고서) 모든 파일의 모든 정보를 수집하고 XML 구조에 기록 할 :
val employeesRdd = employeesDf.map(r => (r.getAs[String]("employeeId"), r))
val skillsRdd = skillsDf.map(r => (r.getAs[String]("employeeId"), r)).groupByKey()
val reportsRdd = reportsDf.map(r => (r.getAs[String]("employeeId"), r)).groupByKey()
...
employeesRdd
.leftOuterJoin(skillsRdd)
.leftOuterJoin(reportsRdd)
...
.toLocalIterator
... // write <employee> nodes one by one
문제점 모든 groupByKey() 작업은 많은 시간이 소요되는 것처럼 매우 느립니다. 그리고 너무 오래 실행하면 java.lang.OutOfMemoryError : GC 오버 헤드 한도를 초과하여 폭발합니다. 저는 로컬 모드에서 Spark 1.5.1을 사용하고 있습니다. 약 20GB가 jvm에 할당되어 있습니다.