ksc*_*ath 1 scala apache-spark delta-lake
我想对 DeltaTable 执行删除操作,其中要删除的键已存在于 DataFrame 上。
目前我正在收集驱动程序上的DataFrame,然后运行删除操作。然而,这对我来说似乎效率很低。
(类似于下面的东西)
val keys = keysDF
.select("key")
.map(_.getLong(0))
.collect()
DeltaTable.forPath(spark, "/path/to/table")
.delete(col("key").isInCollection(keys))
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来实现这一目标?我正在考虑以某种方式利用我的密钥已经分布在集群上的情况。
小智 7
是的 - 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |