【发布时间】:2021-01-09 03:52:33
【问题描述】:
我正在处理一个文件,在将其保存为增量之前,我运行了 repartition(48, key)。在初始运行时,它在增量中生成大约 25 个分区(没有问题,因为密钥可能导致数据落入 25 个分区 - 我认为它不一定为没有数据的节点创建分区?)。
但是,在通过 MERGE 完成的第二次运行中,生成了 60 多个分区文件(这是一个 SCD 进程,预先存在 1700 个密钥,只有 300 个新密钥)
我的理解是repartition使用哈希算法来确定一个key属于哪个分区,那么如果是这样的话,它是如何创建的分区文件比定义的分区多的呢?
代码示例:
df = spark.read...
key = ["COL_A"]
partitions = 48
df.repartition(partitions, *[col(c) for c in key])
【问题讨论】:
-
请提供
df.explain日志和您的代码以便更好地理解 -
我在已编辑的帖子中添加了我的代码正在执行的基本操作。我在此之后直接放入了 df.explain 但它只是脱口而出列,df.explain 需要去哪里?我应该寻找什么来解释为什么它超出了请求的 48 个分区?
-
您能否分享您用于 MERGE 的完整代码以及您在 Spark 会话或表属性中应用的 Delta 选项?
标签: apache-spark databricks delta-lake