apache-spark - 基于另一个数据帧在火花数据帧中创建一个新列
问题描述
我有两个数据框:
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版本最好。
解决方案
您可以进行加入、分组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|
+---+---+
推荐阅读
- spring-boot - 具有生动解决方案的 Spring Boot 测试
- google-sheets - 从公式的计算中排除特定单元格,即使公式引用了这些单元格
- javascript - 如何在 node.js 中过滤以获取具有 xml 数据的 json 对象值
- java - 获取通道的 InputStream 和 OutputStream?
- python - How to build py3-none-any wheels for a project with an optional C extension?
- javascript - How to remove div with id="app" in vue project public/index.html file?
- r - R studio 在分类变量上创建“额外”因子
- hadoop - Does Hadoop 3 support Mahout?
- html - How to have independent multiple radio buttons using bootsrap 5
- javascript - Setting aspect ratio/screen resolution for cytoscape in headless mode