【问题标题】:Spark grouping tuning火花分组调优
【发布时间】: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


    【解决方案1】:

    Spark DataFrame 的分区应该是您的最佳选择。

    分区将有助于在附近存储相关信息的数据。因此它有助于处理快速访问所需信息。

    offical doc , doc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-21
      • 2017-11-24
      • 2021-11-21
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多