PySpark - 比较数据帧

use*_*078 6 python apache-spark apache-spark-sql pyspark pyspark-sql

我是 PySpark 的新手,所以道歉,如果这有点简单,我发现了其他比较数据帧的问题,但不是这样的问题,因此我不认为它是重复的。我正在尝试比较具有相似结构的两个日期框架。“名称”将是唯一的,但计数可能不同。

因此,如果计数不同,我希望它生成一个数据框或一个 python 字典。就像下面一样。关于我如何实现这样的事情的任何想法?

DF1

+-------+---------+
|name   | count_1 |
+-------+---------+
|  Alice|   1500  |
|    Bob|   1000  |
|Charlie|   150   |
| Dexter|   100   |
+-------+---------+
Run Code Online (Sandbox Code Playgroud)

DF2

+-------+---------+
|name   | count_2 |
+-------+---------+
|  Alice|   1500  |
|    Bob|   200   |
|Charlie|   150   |
| Dexter|   10    |
+-------+---------+
Run Code Online (Sandbox Code Playgroud)

产生结果:

不匹配

+-------+-------------+--------------+
|name   | df1_count   | df2_count    |
+-------+-------------+--------------+
|    Bob|   1000      |    200       |
| Dexter|   100       |     10       |
+-------+-------------+--------------+
Run Code Online (Sandbox Code Playgroud)

比赛

+-------+-------------+--------------+
|name   | df1_count   | df2_count    |
+-------+-------------+--------------+
|  Alice|   1500      |   1500       |
|Charlie|   150       |    150       |
+-------+-------------+--------------+
Run Code Online (Sandbox Code Playgroud)

use*_*078 5

所以我创建了第三个 DataFrame,加入 DataFrame1 和 DataFrame2,然后按计数字段过滤以检查它们是否相等:

不匹配:

df3 = df1.join(df2, [df1.name == df2.name] , how = 'inner' )
df3.filter(df3.df1_count != df3.df2_count).show()
Run Code Online (Sandbox Code Playgroud)

比赛:

df3 = df1.join(df2, [df1.name == df2.name] , how = 'inner' )
df3.filter(df3.df1_count == df3.df2_count).show()
Run Code Online (Sandbox Code Playgroud)

希望这对某人有用