如何通过比较 Spark 中具有相同列的两个数据帧来计算列值的数量



如何比较两个数据帧,并获取基于使用 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 不会添加到总和中。

希望对您有所帮助!

最新更新