【发布时间】:2018-07-30 06:10:47
【问题描述】:
我正在 spark databricks 集群上运行联接。连接在两个实体之间,其中一个是分桶的。两个数据帧具有相同数量的分区,并由连接键进行分区/存储。
运行时出现以下错误:
预洗牌前的号码应该只有一个不同的值 注册交易所运营商之间的分区
我将不胜感激任何处理它的帮助。
【问题讨论】:
-
为什么要结束投票?!
标签: apache-spark pyspark databricks
我正在 spark databricks 集群上运行联接。连接在两个实体之间,其中一个是分桶的。两个数据帧具有相同数量的分区,并由连接键进行分区/存储。
运行时出现以下错误:
预洗牌前的号码应该只有一个不同的值 注册交易所运营商之间的分区
我将不胜感激任何处理它的帮助。
【问题讨论】:
标签: apache-spark pyspark databricks
当您在存储桶中有不同数量的预洗牌分区(即映射输出分区)时会发生这种情况。例如,如果您在一个存储桶中有 10 个分区,而在另一个存储桶中有 20 个分区,这应该会发生。
Spark 确保它不会为阶段获得不同数量的预洗牌分区。
来自 Spark 代码中的注释:
我们期望预洗牌分区数量的单个值的原因 就是我们在添加Exchanges的时候,设置了pre-shuffle partitions的个数 (即映射输出分区)使用静态设置,这是 spark.sql.shuffle.partitions。即使两个输入 RDD 有不同数量的分区,它们也会有相同数量的 pre-shuffle 分区
因此,您需要确保两个分桶数据帧在每个桶内具有相同数量的分区。
【讨论】: