scala—使用键的Dataframe从deltatable中删除

x9ybnkn6  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(540)

我想对deltatable执行删除操作,其中要删除的键已经存在于Dataframe上。
目前我正在收集驱动程序上的Dataframe,然后运行删除操作。不过,我觉得效率很低。
(如下所示)

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

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

有没有更有效的方法来实现这一点?我在考虑如何利用我的密钥已经分布在集群上。

zpjtge22

zpjtge221#

是的-在delta中有一个非常好的api

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()

相关问题