Pyspark saveasTable 在覆盖 pyspark 数据帧时出现错误

问题描述 投票:0回答:1

在我的 Pyspark 代码中,我执行了 10 多个连接操作以及其间的多个 groupBy。我想避免使用大型 DAG,因此我决定将数据帧保存为表以避免重新计算。结果,我创建了一个数据库并开始在其中保存我的数据框。

执行 5 个连接操作和一些 groupBy 操作后,我使用以下命令保存了表,直到这里成功运行。

spark.sql("DROP TABLE IF EXISTS  half_yearly_data")
half_yearly_data.write.saveAsTable("half_yearly_data") 
half_yearly_data = spark.read.table('half_yearly_data')

稍后在执行剩余的 join 和 groupBy 后,我运行以下语句,这给了我一个错误

spark.sql("DROP TABLE IF EXISTS db.half_yearly_data")
half_yearly_data.write.saveAsTable("db.half_yearly_data") # Error pointing here
half_yearly_data = spark.read.table('db.half_yearly_data')

错误指向第二行: 自 DataFrame 以来,Delta 表的架构已以不兼容的方式更改 或创建 DeltaTable 对象。请重新定义您的 DataFrame 或 DeltaTable 对象。

我尚未将我的表定义为增量表,但它仍然给我一个与增量表相关的错误。然后我尝试了以下命令

spark.sql("DROP TABLE IF EXISTS db.half_yearly_data")
half_yearly_data.write.mode("overwrite").option("overwriteSchema","true").saveAsTable("db.half_yearly_data") # Error pointing here
half_yearly_data = spark.read.table('db.half_yearly_data')

还是同样的错误。据我所知,当我第二次尝试将数据框转换为表时,第一次创建时出现了新列和一些架构更改。但我在再次创建该表之前先删除该表。我想知道我能在这里做什么。

由于错误指向第二行,我检查是否使用以下命令从数据库中删除了该表,并且该表在数据库中不存在。

spark.sql("show tables in db").show()

我尝试使用不同的表名保存数据,但弹出了相同的错误。虽然新表不存在。

在内置 AI 中,Databricks 笔记本生成的建议指向 Delta 表,但我在这里没有使用 Delta 表。如何第二次覆盖或再次创建我的表?

python join pyspark apache-spark-sql azure-databricks
1个回答
0
投票

你能尝试一下吗? 写入第一个表后并在读取过程中,它开始定义一个新的数据帧名称,然后将此新数据帧写入第二个表。您可以尝试根据转换创建新的数据框变量名称。 df1.写入表1 val df2=读取表1 val df3=df2.//操作1 val df4=Df3.//操作2 df4.写入表2

© www.soinside.com 2019 - 2024. All rights reserved.