我有两个数据框:
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 不同的值是 3 和 5,计数是 2,所以 df2 中的 v2 是 2
谢谢,python版本最好。
答案 0 :(得分:2)
您可以尝试如下:
from pyspark.sql.types import *
from pyspark.sql.functions import *
sdf1 = spark.createDataFrame([
(1,192,1),
(3,192,2),
(4,193,3),
(5,193,3),
(7,193,5),
(9,194,7)
], ["c1", "c2", "c3"])
df2 = spark.createDataFrame([
(192,),
(193,),
(194,)
], ["v1"])
df1 = sdf1.groupBy("c2").agg(countDistinct("c3").alias("cnt"))
df2.join(df1, df1.c2 == df2.v1).select(df2.v1,df1.cnt).show()
答案 1 :(得分:2)
您可以加入,按 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|
+---+---+