Spark:减去两个数据帧
Spark: subtract two DataFrames
在 Spark 版本 1.2.0 中,可以使用 subtract
和 2 SchemRDD
s 来结束与第一个不同的内容
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 中也有对应的函数。
在 Spark 版本 1.2.0 中,可以使用 subtract
和 2 SchemRDD
s 来结束与第一个不同的内容
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 中也有对应的函数。