【问题标题】:Operations and methods to be careful about in Apache Spark?Apache Spark中需要注意的操作和方法?
【发布时间】:2015-01-21 14:31:06
【问题描述】:

在 Apache Spark 中我需要注意哪些操作和/或方法?我听说你应该小心:

  1. groupByKey
  2. collectAsMap

为什么?

还有其他方法吗?

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:

    Spark 中有一些您可以称之为“昂贵”的操作:所有需要 shuffle(数据重组)的操作都属于这一类。在rdd.toDebugString 的结果中检查ShuffleRDD 是否存在,将其送出。

    如果你将“小心”理解为“有可能导致问题”,Spark 中的某些操作在使用时会导致与内存相关的问题:

    • groupByKey 要求属于一个键的所有值都适合一个执行器的内存。这意味着使用低基数键分组的大型数据集可能会导致作业执行崩溃。 (想想allTweets.keyBy(_.date.dayOfTheWeek).groupByKey -> bumm)
      • 支持在收集键值之前使用aggregateByKeyreduceByKey 应用映射端缩减。
    • collect 实现 RDD(强制计算)并将所有数据发送给驱动程序。 (想想allTweets.collect -> bumm)
      • 如果你想触发一个rdd的计算,赞成使用rdd.count
      • 要检查 rdd 的数据,请使用有界操作,例如 rdd.first(第一个元素)或 rdd.take(n) 用于 n 个元素
      • 如果你真的需要做collect,使用rdd.filterrdd.reduce来减少它的基数
    • collectAsMap 只是 collect 在幕后
    • cartesian:创建一个 RDD 与另一个 RDD 的乘积,可能会创建一个非常大的 RDD。 oneKRdd.cartesian(onekRdd).count = 1000000
      • 考虑添加键和join 以组合2 个rdds。
    • 其他人?

    一般而言,了解流经 Spark 作业各个阶段的数据量以及每个操作将如何处理这些数据将有助于您保持头脑清醒。

    【讨论】:

    • 您基本上会立即想到要点:随机播放、内存限制和收集到驱动程序
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2012-05-19
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多