Spark:减去两个数据帧

Spark: subtract two DataFrames

在 Spark 版本 1.2.0 中,可以使用 subtract 和 2 SchemRDDs 来结束与第一个不同的内容

val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)

onlyNewData 包含 todaySchemRDD 中不存在于 yesterdaySchemaRDD 中的行。

Spark 版本 1.3.0 中的 DataFrames 如何实现?

根据 Scala API docs,正在做:

dataFrame1.except(dataFrame2)

将return一个包含dataFrame1中但不在dataframe2中的行的新DataFrame。

PySpark 中它将是 subtract

df1.subtract(df2)

exceptAll如果需要保留重复项

df1.exceptAll(df2)

我试过减法,但结果不一致。 如果我 运行 df1.subtract(df2),结果数据框中并没有显示 df1 的所有行,可能是由于文档中引用了 distinct

exceptAll 解决了我的问题: df1.exceptAll(df2)

对我来说,df1.subtract(df2) 不一致。在一个数据框上正常工作,但在另一个数据框上不正确。那是因为重复。 df1.exceptAll(df2) returns 一个新数据框,其中包含 df1 中不存在于 df2 中的记录,包括任何重复项。

来自 Spark 2.4.0 - exceptAll

data_cl = reg_data.exceptAll(data_fr)

从 Spark 1.3.0 开始,您可以使用 join'left_anti' 选项:

df1.join(df2, on='key_column', how='left_anti')

这些是 Pyspark API,但我想 Scala 中也有对应的函数。