繁体   English   中英

Spark:减去两个数据帧

[英]Spark: subtract two DataFrames

在 Spark 版本1.2.0 中,可以使用带有 2 个SchemRDDsubtract来结束仅与第一个不同的内容

val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)

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

如何使用 Spark 1.3.0版中的DataFrames实现这一点?

根据Scala API docs ,做:

dataFrame1.except(dataFrame2)

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

PySpark 中它会被subtract

df1.subtract(df2)

exceptAll如果需要保留重复项

df1.exceptAll(df2)

我试过减法,但结果不一致。 如果我运行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM