【问题标题】:Spark Job stuck writing dataframe to partitioned Delta tableSpark Job 卡住了将数据帧写入分区 Delta 表
【发布时间】:2021-11-10 18:24:56
【问题描述】:

运行数据块以读取 csv 文件,然后保存为分区增量表。

文件中的总记录为 179619219 。它正在按 COL A(8419 个唯一值)和年份(10 年)和月份进行拆分。

df.write.partitionBy("A","year","month").format("delta").mode("append").save(path)

作业卡在写入步骤并在运行 5-6 小时后中止

【问题讨论】:

标签: python apache-spark pyspark azure-databricks delta-lake


【解决方案1】:

这是非常糟糕的分区架构。您只是为列A 拥有太多唯一值,并且额外的分区正在创建更多分区。 Spark 将需要创建至少 90k 分区,这将需要创建单独的文件(小)等。小文件会损害性能。

对于非Delta表,分区主要用于在读取数据时进行数据跳过。但对于 Delta 湖表,分区可能 不是那么重要,因为 Databricks 上的 Delta 包括 data skipping 之类的东西,您可以申请 ZOrder 等。

我建议使用不同的分区模式,例如,仅year + month,并在写入数据后在A 列上使用 ZOrder 进行优化。这将导致仅创建少数具有较大文件的分区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2017-03-29
    • 2022-08-05
    • 2020-07-17
    • 2018-08-13
    相关资源
    最近更新 更多