Spark:减去两个DataFrame

时间:2015-04-09 11:42:10

标签: apache-spark dataframe rdd

在Spark版本 1.2.0 中,可以使用subtract和2 SchemRDD来最终只使用与第一个不同的内容

val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)

onlyNewData包含todaySchemRDDyesterdaySchemaRDD中不存在的行。

如何使用Spark版本 1.3.0 中的DataFrames实现这一目标?

6 个答案:

答案 0 :(得分:61)

根据api docs,做:

dataFrame1.except(dataFrame2)

将返回一个新的DataFrame,其中包含dataFrame1中的行,但不包含dataframe2中的行。

答案 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中的记录,包括任何重复项。