【发布时间】:2015-01-21 14:31:06
【问题描述】:
在 Apache Spark 中我需要注意哪些操作和/或方法?我听说你应该小心:
groupByKeycollectAsMap
为什么?
还有其他方法吗?
【问题讨论】:
标签: apache-spark rdd
在 Apache Spark 中我需要注意哪些操作和/或方法?我听说你应该小心:
groupByKeycollectAsMap为什么?
还有其他方法吗?
【问题讨论】:
标签: apache-spark rdd
Spark 中有一些您可以称之为“昂贵”的操作:所有需要 shuffle(数据重组)的操作都属于这一类。在rdd.toDebugString 的结果中检查ShuffleRDD 是否存在,将其送出。
如果你将“小心”理解为“有可能导致问题”,Spark 中的某些操作在使用时会导致与内存相关的问题:
groupByKey 要求属于一个键的所有值都适合一个执行器的内存。这意味着使用低基数键分组的大型数据集可能会导致作业执行崩溃。 (想想allTweets.keyBy(_.date.dayOfTheWeek).groupByKey -> bumm)
aggregateByKey 或reduceByKey 应用映射端缩减。 collect 实现 RDD(强制计算)并将所有数据发送给驱动程序。 (想想allTweets.collect -> bumm)
rdd.count
rdd.first(第一个元素)或 rdd.take(n) 用于 n 个元素collect,使用rdd.filter或rdd.reduce来减少它的基数collectAsMap 只是 collect 在幕后cartesian:创建一个 RDD 与另一个 RDD 的乘积,可能会创建一个非常大的 RDD。 oneKRdd.cartesian(onekRdd).count = 1000000
join 以组合2 个rdds。 一般而言,了解流经 Spark 作业各个阶段的数据量以及每个操作将如何处理这些数据将有助于您保持头脑清醒。
【讨论】: