【发布时间】:2019-12-16 11:13:04
【问题描述】:
我在几个地方读到,应尽可能避免包含混洗阶段的转换,因为混洗涉及在节点之间通过网络发送数据,这可能会对程序产生很高的性能成本。
我一直在寻找可能导致 Spark 的 2.4+ 数据帧洗牌的 Spark 转换列表,而我想出的只是关于旧 RDD API 的 this question。
【问题讨论】:
标签: apache-spark apache-spark-sql
我在几个地方读到,应尽可能避免包含混洗阶段的转换,因为混洗涉及在节点之间通过网络发送数据,这可能会对程序产生很高的性能成本。
我一直在寻找可能导致 Spark 的 2.4+ 数据帧洗牌的 Spark 转换列表,而我想出的只是关于旧 RDD API 的 this question。
【问题讨论】:
标签: apache-spark apache-spark-sql
这里是来自 DataFrame API(PySpark 2.4.4 的当前版本以及 Scala API 中的相应函数)的转换列表,通常可能会导致随机播放(但不一定,实际上这取决于您的数据是如何准备的(分桶)或从以前的一些转换中分区):
join(如果计划为 SortMergeJoin)distinct/dropDuplicates进行重复数据删除
groupBy
Window.partitionBy() 与窗口函数进行聚合
repartition / repartitionByRange 函数进行显式数据重新分区orderBy/sort转换进行全局排序subtract 减去两个数据帧
countDistinct 计算列中的不同值
【讨论】: