【问题标题】:How to handle this obscure error when doing a join in spark?加入火花时如何处理这个模糊的错误?
【发布时间】:2018-07-30 06:10:47
【问题描述】:

我正在 spark databricks 集群上运行联接。连接在两个实体之间,其中一个是分桶的。两个数据帧具有相同数量的分区,并由连接键进行分区/存储。

运行时出现以下错误:

预洗牌前的号码应该只有一个不同的值 注册交易所运营商之间的分区

我将不胜感激任何处理它的帮助。

【问题讨论】:

  • 为什么要结束投票?!

标签: apache-spark pyspark databricks


【解决方案1】:

当您在存储桶中有不同数量的预洗牌分区(即映射输出分区)时会发生这种情况。例如,如果您在一个存储桶中有 10 个分区,而在另一个存储桶中有 20 个分区,这应该会发生。

Spark 确保它不会为阶段获得不同数量的预洗牌分区。

来自 Spark 代码中的注释:

我们期望预洗牌分区数量的单个值的原因 就是我们在添加Exchanges的时候,设置了pre-shuffle partitions的个数 (即映射输出分区)使用静态设置,这是 spark.sql.shuffle.partitions。即使两个输入 RDD 有不同数量的分区,它们也会有相同数量的 pre-shuffle 分区

因此,您需要确保两个分桶数据帧在每个桶内具有相同数量的分区。

【讨论】:

  • Avishek,感谢您的回答,但我不确定我是否理解:我已经确保两个数据帧具有相同数量的分区。更准确地说:其中一个数据帧有 100 个桶,另一个有 100 个分区(带重新分区)。我基本上遵循了here 的例子,这个例子只讨论了连接的一侧。您能否详细说明我需要做什么以及为什么?
  • 实际上,我发现读取路径中的一个存储桶是由不同的流写入的,所以您所说的完全有道理。我确保流程相同并且问题已解决。
猜你喜欢
  • 1970-01-01
  • 2015-07-01
  • 2023-03-13
  • 1970-01-01
  • 2021-05-05
  • 2020-01-26
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多