写入增量时检测到模式不匹配 table
A schema mismatch detected when writing to the Delta table
我收到:
A schema mismatch detected when writing to the Delta table
我试着听从建议:
To overwrite your schema or change partitioning, please set:
'.option("overwriteSchema", "true")'.
基于此解决方案:
- 我添加了这样一个选项,但它看起来不起作用或者我只是
做的不对。
- 我清理了
dbfs:/delta-tables/_delta_log/
- 我什至试图删除我保存数据的整个文件夹
(
dbfs:/FileStore/shared_upload/[user]/data_Delta
).
None 已解决此问题。
我做错了什么?
如果我想用一个新集群重用一个旧笔记本,我终止了旧笔记本,为什么它会以这种方式运行,所以我猜它应该是 'clean'?
我按照以下方式进行:
1.I 从 GEN2 加载数据。它们采用镶木地板格式:
spark.read.option("overwriteSchema", "true")\
.parquet(f"wasbs://{CONTAINER_NAME}@{STORAGE_ACCOUNT_NAME}.blob.core.windows.net/data")
如你所见,我将 overwriteSchema
设置为 true
。
2.Then我保存为delta格式:
sd_weather.write.format('delta').mode("overwrite") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
3.Then 我尝试创建 Delta Table
sd_weather.write.format('delta') \
.mode("overwrite").saveAsTable("data_Delta")
这里我收到错误:
AnalysisException:写入 Delta 时检测到模式不匹配 table
你需要在写操作中使用.option("overwriteSchema", "true")
,而不是在读操作中:
sd_weather.write.format('delta').mode("overwrite") \
.option("overwriteSchema", "true") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
您还两次写入数据,一次作为“普通”目录,第二次 - 作为托管 table。如果要在自定义位置创建非托管 table,只需将 path
选项添加到第三个变体(另外,dbfs:/
是默认架构,因此您可以省略它):
sd_weather.write.format('delta') \
.option("overwriteSchema", "true") \
.option("path", "/FileStore/shared_upload/[user]/data_Delta") \
.mode("overwrite").saveAsTable("data_Delta")
此外,这取决于架构有多大不同,如果它只是添加列或类似的东西,那么您可以使用 mergeSchema
而不是 overwriteSchema
。
我收到:
A schema mismatch detected when writing to the Delta table
我试着听从建议:
To overwrite your schema or change partitioning, please set: '.option("overwriteSchema", "true")'.
基于此解决方案:
- 我添加了这样一个选项,但它看起来不起作用或者我只是 做的不对。
- 我清理了
dbfs:/delta-tables/_delta_log/
- 我什至试图删除我保存数据的整个文件夹
(
dbfs:/FileStore/shared_upload/[user]/data_Delta
).
None 已解决此问题。 我做错了什么? 如果我想用一个新集群重用一个旧笔记本,我终止了旧笔记本,为什么它会以这种方式运行,所以我猜它应该是 'clean'?
我按照以下方式进行:
1.I 从 GEN2 加载数据。它们采用镶木地板格式:
spark.read.option("overwriteSchema", "true")\
.parquet(f"wasbs://{CONTAINER_NAME}@{STORAGE_ACCOUNT_NAME}.blob.core.windows.net/data")
如你所见,我将 overwriteSchema
设置为 true
。
2.Then我保存为delta格式:
sd_weather.write.format('delta').mode("overwrite") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
3.Then 我尝试创建 Delta Table
sd_weather.write.format('delta') \
.mode("overwrite").saveAsTable("data_Delta")
这里我收到错误:
AnalysisException:写入 Delta 时检测到模式不匹配 table
你需要在写操作中使用.option("overwriteSchema", "true")
,而不是在读操作中:
sd_weather.write.format('delta').mode("overwrite") \
.option("overwriteSchema", "true") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
您还两次写入数据,一次作为“普通”目录,第二次 - 作为托管 table。如果要在自定义位置创建非托管 table,只需将 path
选项添加到第三个变体(另外,dbfs:/
是默认架构,因此您可以省略它):
sd_weather.write.format('delta') \
.option("overwriteSchema", "true") \
.option("path", "/FileStore/shared_upload/[user]/data_Delta") \
.mode("overwrite").saveAsTable("data_Delta")
此外,这取决于架构有多大不同,如果它只是添加列或类似的东西,那么您可以使用 mergeSchema
而不是 overwriteSchema
。