【问题标题】:How to switch names between columns in Delta Table - Databricks?如何在 Delta Table - Databricks 中的列之间切换名称?
【发布时间】:2022-01-05 09:32:39
【问题描述】:

如何以最有效的方式在 Delta Lake 的 2 列之间切换名称?假设我有以下列:

Address |   Name

我想换个名字,有:

Name    |   Address

首先我重命名了两列:

spark.read.table(„table”) \
  .withColumnRenamed("address", "name1") \
  .withColumnRenamed("name", "address1") \
  .write \
  .format("delta") \
  .mode("overwrite") \
  .option("overwriteSchema", "true") \
  .saveAsTable("table”")

然后我将已经重命名的列重命名为最后一个:

spark.read.table("table”") \
  .withColumnRenamed("name1", "name") \
  .withColumnRenamed("address1", "address") \
  .write \
  .format("delta") \
  .mode("overwrite") \
  .option("overwriteSchema", "true") \
  .saveAsTable("table”") 

【问题讨论】:

    标签: apache-spark pyspark databricks delta-lake


    【解决方案1】:

    在 DataFrame 上使用 toDF function 来设置新名称而不是现有名称怎么样:

    spark.read.table("table”") \
      .toDF("name", "address")
      .write....
    

    如果你有更多的列,那么你可以通过使用现有名称和新名称之间的映射来稍微改变它,并生成正确的列列表:

    mapping = {"address":"name", "name":"address"}
    df = spark.read.table("table”")
    new_cols = [mapping.get(cl, cl) for cl in df.columns]
    df.toDF(*new_cols).write....
    

    【讨论】:

    • 谢谢!据我了解,我需要将数据从增量表移动到数据框。如果我想避免它怎么办?并始终将所有内容都保留在 Delta Table 中?还有比我更优雅的方式吗?
    • 无论如何你都需要覆盖数据。我的方法更通用
    猜你喜欢
    • 2022-01-02
    • 2021-07-26
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2021-09-29
    • 2012-01-22
    相关资源
    最近更新 更多