在火花中创建表需要很多时间

Posted

技术标签:

【中文标题】在火花中创建表需要很多时间【英文标题】:Create table in spark taking a lot of time 【发布时间】:2021-09-15 09:35:23 【问题描述】:

我们有一个像这样的表创建数据块脚本,

finalDF.write.format('delta').option("mergeSchema", "true").mode('overwrite').save(table_path)
          spark.sql("CREATE TABLE IF NOT EXISTS . USING DELTA LOCATION '' ".format('GOLDDB', table, table_path))

所以最初在第一次加载时,table_path 中只有 1 个文件。所以它会随着增量和日常文件的累积而运行。所以在 10 次增量加载之后,这需要大约 10 个小时才能完成。您能否帮助我了解如何优化负载?可以合并文件吗?

我刚刚尝试删除一些文件以进行测试,但它失败了,错误是日志文件中存在一些文件丢失,并且当您手动删除文件时会发生这种情况..

请就如何优化此查询提出建议

【问题讨论】:

【参考方案1】:

您可以使用path 选项+saveAsTable 一步完成所有操作,而不是write + create table

finalDF.write.format('delta')\
  .option("mergeSchema", "true")\
  .option("path", table_path)\
  .mode('overwrite')\
  .saveAsTable(table_name) # like 'GOLDDB.name'

要清理旧数据,您需要使用 VACUUM 命令 (doc),也许您可​​能需要从默认的 30 天减少保留期(请参阅delta.logRetentionDuration 选项的文档)

【讨论】:

非常感谢您的建议..Vacuum 我们每天都在 DB 上执行。我将尝试此命令一次并更新它是否有效 尝试了上述解决方案,但又要花很多时间。 你需要查看执行计划等

以上是关于在火花中创建表需要很多时间的主要内容,如果未能解决你的问题,请参考以下文章

火花塞覆盖测试

从多个火花工人以镶木地板格式保存

平面文件(orc,csv)比火花中的增量表更有效吗

Hivecontext.sql 返回空结果火花

无法通过 SSMS 访问 Azure Synapse Spark 表

在火花中联合后再次排序的蜂巢表排序