如何比较两个数据帧,并获取基于使用 Spark 连接键从第一个数据帧更改为第二个数据帧的列数。
df1
id val1 val2 val3 val4
1 a b c d
2 d f k e
4 r t y u
df2
id val1 val2 val3 val4
1 a h c l
2 d f k e
4 g a w u
count:
id count
1 2
2 0
4 3
from pyspark.sql.functions import col
#change aliases to avoid duplicate columns in joined dataframe
df2=df2.select(*(col(x).alias('d2'+x) for x in df2.columns))
joineddf=df1.alias('df1').join(df2.alias('df2'), df1.id == df2.d2id)
col = [z for z in df1.columns]
jd=joineddf.rdd.map(lambda row: (row.id,sum([int( not x) for x in [row[y]==row['d2'+y] for y in col ]])))
spark.createDataFrame(jd, ['id', 'count']).show()
Output:
+---+-----+
| id|count|
+---+-----+
| 1| 2|
| 2| 0|
| 4| 3|
+---+-----+
我已经取了包括"id"字段在内的所有列,因为结果 0 不会添加到总和中。
希望对您有所帮助!