【问题标题】:Spark SQL output multiple small filesSpark SQL输出多个小文件
【发布时间】:2023-01-26 11:56:42
【问题描述】:

我们有多个连接涉及一个大表(大小约为 500 GB)。联接的输出存储在多个小文件中,每个文件大小为 800kb-1.5mb。因此,这项工作被分成多项任务,需要很长时间才能完成。

我们已经尝试使用 spark 调优配置,例如使用广播连接、更改分区大小、更改每个文件的最大记录数等,但是这些方法没有性能改进,问题也没有解决。使用 coalesce 会使工作在那个阶段完成,并且没有任何进展。

请查看此链接以获取 Spark UI 指标屏幕截图,https://i.stack.imgur.com/FfyYy.png

【问题讨论】:

  • Coalesce 是在加入后立即添加的还是在写入输出文件之前添加的?传递给此函数的分区数是多少?

标签: apache-spark pyspark apache-spark-sql databricks azure-databricks


【解决方案1】:

spark UI 确认了您关于太多小文件的报告。您将为每个 spark 分区获得一个文件,并且在您写入输出的最后阶段有 33,479。 33k 分区可能是您加入的正确分区数,但不是您写入的正确分区数。

您需要在加入后的工作中添加另一个阶段。第二个需要将 spark 分区的数量减少到合理的数量(输出 32MB - ~128MB 文件) 像合并或重新分区之类的东西。甚至可能是一种:( 您想要定位 ~350 个分区。

此图显示了您想手动或自动执行的操作(在 Databricks 上使用 spark)

如果您使用的是 Databricks,那么就像使用 Delta Lake 一样简单,您可以打开Auto Optimize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2017-01-10
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多