在Apache Spark中要小心的操作和方法?

时间:2015-01-21 14:31:06

标签: apache-spark rdd

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

  1. groupByKey
  2. collectAsMap
  3. 为什么呢?

    还有其他方法吗?

1 个答案:

答案 0 :(得分:11)

你可以打电话给那些昂贵的' Spark中的操作:所有需要shuffle(数据重组)的都属于这一类。检查ShuffleRDD rdd.toDebugString的结果是否存在groupByKey

如果你的意思是"小心"作为"可能导致问题",Spark中的某些操作在使用时会引起与内存相关的问题:

  • allTweets.keyBy(_.date.dayOfTheWeek).groupByKey要求所有值都落在一个密钥下,以适应一个执行程序的内存。这意味着使用低基数键分组的大型数据集可能会导致作业执行崩溃。 (想想aggregateByKey - > bumm)
    • 支持使用reduceByKeycollect在收集密钥值之前应用地图侧缩减。
  • allTweets.collect具体化RDD(强制计算)并将所有数据发送给驱动程序。 (想想rdd.count - > bumm)
    • 如果您想触发rdd的计算,请使用rdd.first
    • 要检查您的rdd的数据,请使用rdd.take(n)(第一个元素)或collect这样的有界操作来获取n个元素
    • 如果您确实需要rdd.filter,请使用rdd.reducecollectAsMap来降低其基数
  • collect幕后只有cartesian
  • oneKRdd.cartesian(onekRdd).count = 1000000:创建一个RDD与另一个RDD的产品,可能会创建一个非常大的RDD。 join
    • 考虑添加密钥和{{1}}以组合2个rdds。
  • 他人?

一般而言,了解流经Spark作业各阶段的数据量以及每项操作将对其进行的操作将有助于您保持精神状态。