基于另一个Dataframe在sparkDataframe中创建一个新列

pdkcd3nj  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(311)

我有两个Dataframe:
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版本是最好的。

5rgfhyps

5rgfhyps1#

你可以加入,分组 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|
+---+---+
u5rb5r59

u5rb5r592#

您可以尝试以下操作:

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()

相关问题