Apache Spark需要注意哪些操作和/或方法?我听说你应该小心:
groupByKey
collectAsMap
为什么呢?
还有其他方法吗?
答案 0 :(得分:11)
你可以打电话给那些昂贵的' Spark中的操作:所有需要shuffle(数据重组)的都属于这一类。检查ShuffleRDD
rdd.toDebugString
的结果是否存在groupByKey
。
如果你的意思是"小心"作为"可能导致问题",Spark中的某些操作在使用时会引起与内存相关的问题:
allTweets.keyBy(_.date.dayOfTheWeek).groupByKey
要求所有值都落在一个密钥下,以适应一个执行程序的内存。这意味着使用低基数键分组的大型数据集可能会导致作业执行崩溃。 (想想aggregateByKey
- > bumm)
reduceByKey
或collect
在收集密钥值之前应用地图侧缩减。 allTweets.collect
具体化RDD(强制计算)并将所有数据发送给驱动程序。 (想想rdd.count
- > bumm)
rdd.first
rdd.take(n)
(第一个元素)或collect
这样的有界操作来获取n个元素rdd.filter
,请使用rdd.reduce
或collectAsMap
来降低其基数collect
幕后只有cartesian
oneKRdd.cartesian(onekRdd).count = 1000000
:创建一个RDD与另一个RDD的产品,可能会创建一个非常大的RDD。 join
一般而言,了解流经Spark作业各阶段的数据量以及每项操作将对其进行的操作将有助于您保持精神状态。