【发布时间】:2016-10-25 03:09:35
【问题描述】:
给定以下文件:
- 员工
- 技能
- 报告
- 等。
员工和其他每个文件之间存在 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。
【问题讨论】:
标签: apache-spark apache-spark-sql spark-dataframe bigdata