如何通过比较火花中相同列的两个数据帧来计算列值的数量
Posted
技术标签:
【中文标题】如何通过比较火花中相同列的两个数据帧来计算列值的数量【英文标题】:How to calculate the number of column values got changed by comparing two dataframes with same columns in spark 【发布时间】:2017-11-20 09:47:08 【问题描述】:如何比较两个数据帧并根据使用 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
【问题讨论】:
您有没有尝试过任何方法? :) 【参考方案1】: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|
+---+-----+
我已获取 sum 中的所有列,包括“id”字段,因为结果 0 不会添加到总和中。
希望有帮助!
【讨论】:
如果每个数据框中的列数很大,我们需要做什么。上面又是一个sql查询。我们有任何使用数据帧或 RDD 的解决方案吗?以上是关于如何通过比较火花中相同列的两个数据帧来计算列值的数量的主要内容,如果未能解决你的问题,请参考以下文章