【问题标题】:How to convert List[List[Result]] into RDD[Result]?如何将 List[List[Result]] 转换为 RDD[Result]?
【发布时间】:2019-08-07 01:52:57
【问题描述】:
  • 在我的情况下,结果是最终案例类
  • 我无法使用 sc.parallelize(),因为我的列表非常大,会导致驱动程序崩溃。

【问题讨论】:

  • 如果List[List[Result]] 大到足以使驱动程序崩溃,那么您的问题发生在转换为RDD 的问题有意义之前。 List[List[Result]] 来自哪里?您应该询问如何从那里直接转换为 RDD,跳过加载到一个 JVM 的内存中。

标签: scala list apache-spark rdd data-conversion


【解决方案1】:

如果您的数据太大而无法一次在内存中处理,请一次并行化尽可能多的List[Result](扁平化),必要时持久化,然后合并 RDD。这样,您将在没有 OOM 的情况下获得所有结果的 RDD。

【讨论】:

    【解决方案2】:

    答案是 List 不会缩放。由于我使用 Lists 和 List[List] 处理“大”数据并不是最好的主意,因为与 RDD 不同,列表不会被切片并分布在执行程序之间。所以使用非常大的 List 可能会导致 executor 节点崩溃。

    我最终做的是通过代码更新以创建 RDD[List[Result]],然后使用 flatMap 合并并获取 RDD[Result]。

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      相关资源
      最近更新 更多