Dataframe 在比较pyspark中的两个数据帧时,如何找出新的内容和更改的内容?

Dataframe 在比较pyspark中的两个数据帧时,如何找出新的内容和更改的内容?,dataframe,pyspark,apache-spark-sql,Dataframe,Pyspark,Apache Spark Sql,我有两个超过1百万条记录的数据帧。只有约10%的行是不同的。我知道如何找到delta: df1.subtract(df2) 但我也想知道哪些记录是新的,哪些记录发生了变化。 我知道,一旦我有了delta,我就可以使用配置单元上下文来实现这一点,但也许有一种简单的方法可以基于一些pyspark函数来实现这一点 提前谢谢 只需使用leftsemi和leftanti执行连接 什么定义了表中的行?主键?Rank?id字段是唯一的不幸的是,我看到leftanti在Spark 1.6中不工作。@max04

我有两个超过1百万条记录的数据帧。只有约10%的行是不同的。我知道如何找到delta:

df1.subtract(df2)
但我也想知道哪些记录是新的,哪些记录发生了变化。 我知道,一旦我有了delta,我就可以使用配置单元上下文来实现这一点,但也许有一种简单的方法可以基于一些pyspark函数来实现这一点

提前谢谢

只需使用leftsemi和leftanti执行连接


什么定义了表中的行?主键?Rank?id字段是唯一的不幸的是,我看到leftanti在Spark 1.6中不工作。@max04同样可以用left实现。只是在df2.id为null的地方进行筛选,以获取新的,而不是null来获取ModifiedEP,昨天做的,忘记在那里进行注释。事实上,这很棘手。必须使用此df1.joindf2,how='left_outer',on=df1.id=df2.id.filterdf2.id.isNull,因为此df1.joindf2,how='left_outer',on='id'。filterdf2.id.isNull不起作用。事实证明,当我在filter子句中指定数据帧时,我也必须在整个语句中指定它,所以在本例中是在on子句中。
df = df1.subtract(df2) #diff dataframe
df.join(df2, how='leftsemi', on='id').show() #will print the modified lines
df.join(df2, how='leftanti', on='id').show() #will print the new lines