Pyspark 在写入时用 Null 值填充我的列

Jac*_*aco 2 python apache-spark pyspark databricks delta-lake

我有一个关于 Pyspark 写作的问题,我目前正在运行以下行:

sat_prospect_credentials.write.format("delta").mode("append").save(f"{TABLE_MAP[table]}")
Run Code Online (Sandbox Code Playgroud)

它将 Spark DataFrame 以增量格式写入 Azure ADLS。我遇到以下问题,我有一个名为 end_date 的列,其中填充了 Null 值(这是故意的,因为这是用于 SCD 管理),但是,当我写入 DataLake 时,该列将被删除。有谁知道如何防止这种情况发生? 这是带有 end_date 列的原始 DataFrame

写完后无栏

谢谢!

我尝试过 schemaOverwrite、mergeSchema 和其他选项。我不知道从这里开始如何跟进

Ale*_*Ott 5

Delta Lake 使用 Parquet 作为数据存储格式,它不支持 null 类型的列,因此 null 类型的列被删除 - 这是一个众所周知的问题,您可以在 GitHub Issue 中阅读相关内容

如果要保留空值,则需要将它们转换为某种类型,例如 to string(或在您的情况下为 to date),因此该列不会有空类型。像这样的东西:

df = df.withColumn("end_date", col("end_date").cast("date"))
Run Code Online (Sandbox Code Playgroud)