gpt4 book ai didi

scala - Spark - scala - 使用覆盖模式将数据帧保存到表中

转载 作者:行者123 更新时间:2023-12-02 06:19:00 28 4
gpt4 key购买 nike

我想知道“覆盖”在这里到底做什么。假设我有一个表,表“tb1”中包含以下记录(抱歉,表的表示不正确)

驾驶员 vin 型号

martin abc ford escape
john abd toyota camry
amy abe chevrolet malibu
carlos abf honda civic

现在我有以下数据框(mydf),具有相同的列,但具有以下行/数据

martin abf toyota corolla
carlos abg nissan versa

以覆盖模式将上述数据框保存到“tb1”后,该数据框是否会完全删除“tb1”的内容并写入mydf的数据(以上两条记录)?

但是,我希望覆盖模式仅覆盖那些“驱动程序”列具有相同值的行。在这种情况下,对于“tb1”中的 4 条记录,mydf 将仅覆盖以上 2 条记录,结果表如下 -

驾驶员 vin 型号

martin abf toyota corolla
john abd toyota camry
amy abe chevrolet malibu
carlos abg nissan versa

我可以使用覆盖模式实现此功能吗?

mydf.write.mode(SaveMode.Overwrite).saveAsTable("tb1")

最佳答案

您的意思是在主键上合并 2 个数据帧。您想要合并两个数据框并用新行替换旧行并附加额外的行(如果存在)。

这无法通过 SaveMode.Overwrite 或 SaveMode.append 来实现。

为此,您需要在主键上实现 2 个数据帧的合并功能。

类似这样的

 parentDF = // actual dataframe
deltaDF = // new delta to be merged


val updateDF = spark.sql("select parentDF.* from parentDF join deltaDF on parentDF.id = deltaDF.id")
val totalDF = parentDF.except(updateDF).union(deltaDF)
totalDF.write.mode(SaveMode.Overwrite).saveAsTable("tb1")

关于scala - Spark - scala - 使用覆盖模式将数据帧保存到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474476/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com