![](/img/trans.png)
[英]How to subtract two DataFrames keeping duplicates in Spark 2.3.0
[英]Spark: subtract two DataFrames
在 Spark 版本1.2.0 中,可以使用带有 2 个SchemRDD
的subtract
来结束仅与第一个不同的内容
val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)
onlyNewData
包含的行todaySchemRDD
不中不存在yesterdaySchemaRDD
。
如何使用 Spark 1.3.0版中的DataFrames
实现这一点?
根据Scala API docs ,做:
dataFrame1.except(dataFrame2)
将返回一个新的 DataFrame,其中包含 dataFrame1 中的行,但不包含 dataframe2 中的行。
我试过减法,但结果不一致。 如果我运行df1.subtract(df2)
,则并非所有 df1 行都显示在结果数据框中,可能是由于文档中引用的distinct
。
exceptAll
解决了我的问题: df1.exceptAll(df2)
从 Spark 1.3.0 开始,您可以将join
与'left_anti'
选项一起使用:
df1.join(df2, on='key_column', how='left_anti')
这些是Pyspark API ,但我想 Scala 中也有相应的函数。
对我来说, df1.subtract(df2)
是不一致的。 在一个数据帧上正常工作,但在另一个数据帧上没有。 那是因为重复。 df1.exceptAll(df2)
返回一个新的数据df1.exceptAll(df2)
,其中包含 df1 中不存在于 df2 中的记录,包括任何重复项。
从 Spark 2.4.0 - exceptAll
data_cl = reg_data.exceptAll(data_fr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.