apache spark sql表覆盖问题
Posted
技术标签:
【中文标题】apache spark sql表覆盖问题【英文标题】:apache spark sql table overwrite issue 【发布时间】:2020-12-29 09:36:22 【问题描述】:我正在使用以下代码从 databricks 中的数据框创建表并遇到错误。
df.write.saveAsTable("newtable")
这在第一次时效果很好,但是如果我要像下面这样重写的话,可以重用性
df.write.mode(SaveMode.Overwrite).saveAsTable("newtable")
我收到以下错误。
错误信息:
org.apache.spark.sql.AnalysisException: Can not create the managed table newtable. The associated location dbfs:/user/hive/warehouse/newtable already exists
【问题讨论】:
【参考方案1】: What are the differences between saveAsTable and insertInto in different SaveMode(s)?运行以下命令修复问题:
dbutils.fs.rm("dbfs:/user/hive/warehouse/newtable/", true)
或者
设置标志
spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation = true
spark.conf.set("spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation","true")
【讨论】:
嗨@vaquar khan,感谢您的回复。我仍然收到错误,不知道为什么不能使用 saveAsTable 进行覆盖。此外,databricks 文档建议不要在大型数据集上使用 dbutils.fs.rm。(kb.databricks.com/data/list-delete-files-faster.html) 试试这个。将标志 spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation 设置为 true【参考方案2】:SQL 配置“spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation”已在版本 3.0.0 中删除。它已被删除以防止丢失非默认值的用户数据。
【讨论】:
以上是关于apache spark sql表覆盖问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache Spark Notebook 覆盖 Bluemix 对象存储中的 Parquet 文件