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

问题描述

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

当前,我正在收集驱动程序上的DataFrame,然后运行删除操作。但是对我来说,这似乎效率很低。

(如下所示)

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

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

有没有更有效的方法来实现这一目标?我在想以某种方式利用我的密钥已经分布在整个集群中。

解决方法

是的-在数据湖中有一个非常好的api

val键= keysDF .select(“ key”)

val targetDeltaTable = DeltaTable.forPath(火花,路径)

targetDeltaTable.alias(“ t”) 。合并( keys.alias(“ k”), “ t.key = s.key”) .whenMatched()。delete() .execute()