在火花中创建表需要很多时间
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 上执行。我将尝试此命令一次并更新它是否有效 尝试了上述解决方案,但又要花很多时间。 你需要查看执行计划等以上是关于在火花中创建表需要很多时间的主要内容,如果未能解决你的问题,请参考以下文章