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.
我在 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.