数据块-如何确定分区数?

问题描述

我正在处理一个文件,在保存为增量之前,我对其运行了repartition(48,key)。最初运行时,它会在增量中生成大约25个分区(没有问题,因为可能是密钥导致数据落入25个分区中-我认为它不一定为没有数据的节点创建分区吗?)。

但是,在第二次运行中(通过MERGE完成),生成了60多个分区文件(这是一个SCD进程,预先存在1700个密钥,而只有300个新密钥)

我的理解是repartition使用散列算法来确定密钥属于哪个分区,因此,这种情况下,它如何创建比定义的分区更多的分区文件

代码示例:

df = spark.read...
  
key = ["COL_A"]
partitions = 48
df.repartition(partitions,*[col(c) for c in key])

解决方法

“重新分区”操作是在原始数据帧上进行的,在转换为 delta-lake 后,它不会保留那些重新分区设置。 创建 delta-lake 后,合并操作将找到与 whenMatched 条件匹配的分区,并将它们替换为新数据。如您所见,它跳过了大量数据并提高了性能。同样,您可以添加/附加新数据,并且这些数据也可以作为新分区登陆。您需要Optimize您的 delta-lake 来整合新数据更改时创建的小文件。