Overwrite/remove delta table 在 Azure Databricks 中使用没有类型转换的空列写入错误后

Overwrite/remove delta table in Azure Databricks after error in writing with null column without type cast

我在 Azure Databricks 中使用 pyspark。我曾尝试用如下创建的空列编写增量 table:

df = df.withColumn('val2', funcs.lit(None))

使用以下函数

def write_to_delta_table(df, fnm, tnm, path):
  df.createOrReplaceTempView(fnm) 
  spark.sql(f'''select *
  from {fnm}
  ''').repartition(1).write.format('delta').mode('overwrite').option('overwriteSchema', 'true').save(f'{path}/{fnm}')
  spark.sql(f'''DROP TABLE IF EXISTS {tnm}; ''')
  spark.sql(f'''CREATE TABLE {tnm}
    USING DELTA
    LOCATION  '{path}/{fnm}'
    ''')

我收到一个错误并意识到我需要将空列转换为其预期类型

df = df.withColumn('val2', funcs.lit(None).cast(BooleanType())

但是,即使这样做了,我也无法使用上面的函数编写数据框。它的展示 诸如

之类的错误
org.apache.spark.SparkException: Cannot recognize hive type string: void, ...

对于删除 table 调用中的该列。

--> spark.sql(f'''DROP TABLE IF EXISTS {tnm}; ''')

即使我从 blob 存储中物理删除 parquet 文件,我也会看到此错误。我似乎无法 delete/overwrite 这个增量 table。即使我删除了有问题的列并尝试写入它,我也会看到此错误,因为它无法删除它。请注意,table 的一个版本已经存在,具有不同的架构。

事实证明,关闭并重新启动集群使这个问题消失了。我现在可以覆盖 table.