代码之家  ›  专栏  ›  技术社区  ›  Enrique Benito Casado

Databricks Pyspark写入增量格式模式覆盖无法正常工作

  •  0
  • Enrique Benito Casado  · 技术社区  · 7 月前

    我有以下代码

    以前我有一个三角表 180 中的列 my_path ,我选择一列并尝试覆盖

        columns_to_select = ["one_column"]
        df_one_column = df.select(*columns_to_select)
        df_one_column.write.format("delta").mode("overwrite").option("mergeSchema", "true").save(my_path)
        
        new_schema = spark.read.format("delta").load(my_path).schema
        target_column = [field.name for field in new_schema.fields]
        print(len(target_column)) # return 180
    

    我希望返回1,因为我只从数据框中选择了一列,但返回了180列

    1 回复  |  直到 7 月前
        1
  •  1
  •   Sharma    7 月前

    你需要使用 option("overwriteSchema", "True") 写作时

    以下是示例

    df.write.format("delta").mode("overwrite").save(my_path)
    df_first = spark.read.format("delta").load(my_path)
    print(df_first.columns, len(df_first.columns))
    

    Please fins the below screenshot

    columns_to_select = ["firstname"]
    df_one_column = df.select(*columns_to_select)
    df_one_column.write.format("delta").mode("overwrite").option("overwriteSchema", "True").option("mergeSchema", "true").save(my_path) 
    df_second = spark.read.format("delta").load(my_path)
    print(df_second.columns, len(df_second.columns))
    

    Please find the below screenshot

    有关更多信息,请参阅以下链接

    合并架构: https://delta.io/blog/2023-02-08-delta-lake-schema-evolution/

    oversiteSchema: https://docs.databricks.com/en/delta/update-schema.html#explicitly-update-schema-to-change-column-type-or-name