Apache Spark 中需要注意的操作和方法?
Operations and methods to be careful about in Apache Spark?
在Apache Spark中需要注意哪些操作and/or方法?我听说你应该小心:
groupByKey
collectAsMap
为什么?
还有其他方法吗?
Spark 中有您可以称之为 'expensive' 的操作:所有需要随机播放(数据重组)的操作都属于此类。检查 rdd.toDebugString
的结果是否存在 ShuffleRDD
如果你把"careful"理解为"with the potential of causing problems",Spark中的一些操作如果不小心使用会导致内存相关的问题:
groupByKey
要求属于一个键的所有值都适合一个执行程序的内存。这意味着使用低基数键分组的大型数据集有可能导致作业执行崩溃。 (想想 allTweets.keyBy(_.date.dayOfTheWeek).groupByKey
-> 笨蛋)
- 赞成在收集键值之前使用
aggregateByKey
或 reduceByKey
应用映射端缩减。
collect
实现 RDD(强制计算)并将所有数据发送给驱动程序。 (想想 allTweets.collect
-> 笨蛋)
- 如果你想触发一个rdd的计算,赞成使用
rdd.count
- 要检查 rdd 的数据,请使用有界操作,例如
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 作业各个阶段的数据量以及每个操作将对其执行的操作将有助于您保持头脑清醒。
在Apache Spark中需要注意哪些操作and/or方法?我听说你应该小心:
groupByKey
collectAsMap
为什么?
还有其他方法吗?
Spark 中有您可以称之为 'expensive' 的操作:所有需要随机播放(数据重组)的操作都属于此类。检查 rdd.toDebugString
的结果是否存在 ShuffleRDD
如果你把"careful"理解为"with the potential of causing problems",Spark中的一些操作如果不小心使用会导致内存相关的问题:
groupByKey
要求属于一个键的所有值都适合一个执行程序的内存。这意味着使用低基数键分组的大型数据集有可能导致作业执行崩溃。 (想想allTweets.keyBy(_.date.dayOfTheWeek).groupByKey
-> 笨蛋)- 赞成在收集键值之前使用
aggregateByKey
或reduceByKey
应用映射端缩减。
- 赞成在收集键值之前使用
collect
实现 RDD(强制计算)并将所有数据发送给驱动程序。 (想想allTweets.collect
-> 笨蛋)- 如果你想触发一个rdd的计算,赞成使用
rdd.count
- 要检查 rdd 的数据,请使用有界操作,例如
rdd.first
(第一个元素)或rdd.take(n)
用于 n 个元素 - 如果你真的需要
collect
,使用rdd.filter
或rdd.reduce
来减少它的基数
- 如果你想触发一个rdd的计算,赞成使用
collectAsMap
只是collect
在幕后cartesian
:创建一个 RDD 与另一个 RDD 的乘积,可能会创建一个非常大的 RDD。oneKRdd.cartesian(onekRdd).count = 1000000
- 考虑添加键和
join
以合并 2 个 rdds。
- 考虑添加键和
- 其他?
一般来说,了解流经 Spark 作业各个阶段的数据量以及每个操作将对其执行的操作将有助于您保持头脑清醒。