因此将spark数据帧直接附加到配置单元表的命令是
df.write().mode("append").saveAsTable("tableName")
但是append模式是否可以确保避免重复行? 例如:
有没有一种方法可以确保追加时不会发生重复?
编辑: 有两种方法:
我要寻找的是,有没有一种方法可以直接完成所有这些操作而又没有将数据写入某些临时表或数据帧的中间步骤?
谢谢。
答案 0 :(得分:1)
将spark数据框附加到配置单元表将导致 两行A 。
为确保在“追加”期间不会发生重复
您需要将整个配置单元表加载到另一个数据帧(df1)中 将数据附加到表中之前。
然后合并两个数据帧(df,df1)并应用.dropDuplicates()
(或)
window functions
从重复的记录中获取所需的记录
记录。
示例:
union_df=df.union(df1)
union_df.dropDuplicates()
(或)use window function
然后将数据写入新的 表格1}}) 然后最终从新表中选择数据,覆盖 现有的配置单元表。
示例:
union_df.write().mode("append").saveAsTable("newtableName")
最后删除新表
spark.sql("insert overwrite table <database>.<existing_table> select * from <database>.<new_table>"))
通过这种方式,您将无法在配置单元表中重复数据。
答案 1 :(得分:0)
df.write不能满足您的任何要求。抱歉。即您将可能获得2行。