gpt4 book ai didi

scala - Spark : Would a dataframe repartitioned to one node experience a shuffle when a groupBy is called on it?

转载 作者:可可西里 更新时间:2023-11-01 15:45:52 26 4
gpt4 key购买 nike

假设我有一些数据都在同一个分区上(我之前在数据帧上执行了 .coalesce(1))。我现在想对数据进行分组并对其进行聚合。如果我在数据框上使用 .groupBy,这些组会被放置到不同的节点上吗?

如果这是真的,我想避免这种情况,因为我想对这些组执行这些计算而不需要过多改组。

最佳答案

首先,coalesce(1) 并不能保证你的所有数据都在一个节点中,要确保你必须使用 repartition(1),这将迫使您将所有数据统一在一个节点中。 coalesce 仅对同一节点中的分区进行分组,因此如果您的数据分布在 5 个节点中(每个节点中有多个分区),它将在最后保留 5 个分区。 repartition 强制洗牌,将所有数据移动到单个节点。

但是,如果您关心的是聚合中的分区数量,这取决于,如果聚合只是您所有数据的reduce,spark sql 将尝试在每个节点中首先减少,然后然后减少每个节点的结果,一个例子将是一个计数。但是对于桶化聚合,比如计算一个id的元素数量,spark做的是首先在每个节点中减少,然后将数据洗牌,放入桶中,以确保每个节点的所有减少,对于相同的id在同一个节点中,并再次减少它们。桶的数量是通过属性 spark.sql.shuffle.partitions 配置的,每个桶都将作为您作业中的一个任务执行。请小心,因为将 spark.sql.shuffle.partitions 设置为 one 可能会使进程的其他部分变慢,例如连接或大聚合,或者导致内存不足错误。

关于scala - Spark : Would a dataframe repartitioned to one node experience a shuffle when a groupBy is called on it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54982575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com