执行 Group By - 单次迭代与两次迭代

问题描述 投票:0回答:1

当我们在 Spark 中执行

groupBy
时,它是否会将整个分组数据带到单个分区/执行器,或者它执行初始分组(无论数据存在于哪个分区),最后将每个分区中的所有唯一组带到单个分区作为最终组?

例如:如果我们有 100 条记录(仅用于说明),其中包含城市和国家两个字段。基于城市和国家的 5 组,即每个城市、国家在不同分区上有 20 条记录。

当我们执行

group by city,country
时,Spark是否在单个分区级别执行第一级分组,然后通过将所有相关城市、国家/地区组带入单个分区来执行最终分组,或者Spark通过打乱所有相关组而不是两个组来仅执行单级分组级别分组?

scala apache-spark pyspark
1个回答
0
投票

Spark 通常希望在 shuffle 过程中尽量减少数据的移动,因此它会首先对分区执行“group by”,然后对数据进行 shuffle,以再次将相关组聚集在一起。

示例:当您执行 groupBy("city","country") 时,它将在分区(内部)内进行洗牌,然后在分区之间将(相同的城市和国家)聚集在同一分区中以进行最终移动。

虽然这取决于其他因素。

© www.soinside.com 2019 - 2024. All rights reserved.