【问题标题】:Spark Scala SaveMode.Append - does it just append or also update?Spark Scala SaveMode.Append - 它只是追加还是更新?
【发布时间】:2021-04-21 08:02:01
【问题描述】:

如果我有一个 DF,并且我正在写信到这样的位置:

df.write.mode(SaveMode.Append).parquet(outputFilePath)

它只是简单地附加到outputFilePath 还是它也会更新?例如,如果我有一行3 | a | 27,并附加一个3 | a | 200 的DF,它会有两行吗?这是否意味着我每次都必须删除表并重新创建?

【问题讨论】:

    标签: scala apache-spark hdfs


    【解决方案1】:

    它只是简单地附加到outputFilePath 还是更新?

    Append 只会将 DataFrame 的内容附加到该位置的现有数据中。

    这是否意味着我每次都必须删除表并重新创建?

    是的。但是您也可以查看Delta Lake,它使用 parquet 格式为 Spark 带来了 ACID 事务。

    对于该用例,您可以使用 MERGE

    val updatesDF = // updates data 
    
    DeltaTable.forPath(spark, outputFilePath)
      .as("destination")
      .merge(updatesDF.as("updates"), "destination.Id = updates.Id")
      .whenMatched
      .updateExpr(Map("value" -> "updates.value"))
      .whenNotMatched
      .insertExpr(Map("id" -> "updates.id", "value" -> "updates.value"))
      .execute()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多