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

Jos*_*ger 4 apache-spark rdd

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

  1. groupByKey
  2. collectAsMap

为什么?

还有其他方法吗?

maa*_*asg 11

你可以在Spark中称之为'昂贵'的操作:所有那些需要洗牌(数据重组)都属于这一类.检查ShuffleRDD结果是否存在rdd.toDebugString.

如果你的意思是"小心"为"有可能导致问题",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减少其基数
  • collectAsMapcollect在幕后
  • cartesian:创建一个RDD与另一个RDD的产品,可能会创建一个非常大的RDD. oneKRdd.cartesian(onekRdd).count = 1000000
    • 考虑添加键并join组合2个rdds.
  • 其他?

一般而言,了解流经Spark作业各阶段的数据量以及每项操作将对其进行的操作将帮助您保持精神上的理智.