使用键的数据框从 DeltaTable 中删除

Deleting from a DeltaTable using a dataframe of keys

我想对 DeltaTable 执行删除操作,其中要删除的键已经存在于 DataFrame 中。

目前正在收集驱动上的DataFrame,然后运行删除操作。但是我觉得效率很低。

(如下所示)

val keys = keysDF
            .select("key")
            .map(_.getLong(0))
            .collect()

DeltaTable.forPath(spark, "/path/to/table")
        .delete(col("key").isInCollection(keys))

有没有更有效的方法来实现这个?我正在考虑以某种方式利用我的密钥已经分布在集群中。

是的 - 有一个非常好的 api in delta

val keys = keysDF
            .select("key")

val targetDeltaTable = DeltaTable.forPath(spark, path)

targetDeltaTable.alias("t")
      .merge(
        keys.alias("k"),
        "t.key = s.key")
      .whenMatched().delete()
      .execute()