首页 > 解决方案 > 基于另一个数据帧在火花数据帧中创建一个新列

问题描述

我有两个数据框:

df1:

c1    c2   c3
1    192    1
3    192    2
4    193    3
5    193    3
7    193    5
9    194    7

df2:

v1
192 
193
194

我想在 df2 中添加新列,结果是:

df2:

v1     v2
192    2
193    2
194    1

解释:v1=193,df1中有3行,对应c3为3\3\5,distinct值为3和5,计数为2,所以df2中的v2为2

谢谢,python版本最好。

标签: apache-sparkpysparkapache-spark-sql

解决方案


您可以进行加入、分组v1并获取c3.

import pyspark.sql.functions as F

result = (df1.join(df2, df1.c2 == df2.v1)
             .groupBy('v1')
             .agg(F.countDistinct('c3').alias('v2'))
         )

result.show()
+---+---+
| v1| v2|
+---+---+
|193|  2|
|192|  2|
|194|  1|
+---+---+

推荐阅读