在Spark版本 1.2.0 中,可以使用subtract
和2 SchemRDD
来最终只使用与第一个不同的内容
val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)
onlyNewData
包含todaySchemRDD
中yesterdaySchemaRDD
中不存在的行。
如何使用Spark版本 1.3.0 中的DataFrames
实现这一目标?
答案 0 :(得分:61)
答案 1 :(得分:27)
在pyspark DOCS中,它将减去
df1.subtract(df2)
答案 2 :(得分:3)
我尝试减法,但结果不一致。
如果我运行df1.subtract(df2)
,则结果数据帧中不会显示df1的所有行,可能是文档中引用的distinct
所致。
这解决了我的问题:
df1.exceptAll(df2)
答案 3 :(得分:2)
从 Spark 1.3.0 开始,您可以将 join
与 'left_anti'
选项一起使用:
df1.join(df2, on='key_column', how='left_anti')
这些是Pyspark API,但我想Scala 中也有相应的函数。
答案 4 :(得分:1)
来自 Spark 2.4.0 - exceptAll
data_cl = reg_data.exceptAll(data_fr)
答案 5 :(得分:0)
对我来说,df1.subtract(df2)不一致。在一个数据帧上正常工作,但在另一数据帧上工作不正确。那是因为重复。 df1.exceptAll(df2)返回一个新的数据帧,其中包含df1中不存在的df1中的记录,包括任何重复项。