给出以下文件:
在员工和每个其他文件之间存在1对N的关系,例如一个员工对应多种技能。每个文件介于500MB到1.5GB之间,总共大约有10个文件。 对于每个员工,我想汇总/收集所有文件(技能,报告等)中的所有信息,并将其写入XML结构:
<employees>
<employee>
<skills>
<skill>...</skill>
<skill>...</skill>
...
</skills>
<reports
<report>...</report>
<report>...</report>
...
</reports>
...
</employee>
...
</employees>
我正在做一些事情:
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,并为jvm分配了大约20GB。
答案 0 :(得分:0)