python - Pyspark在第二个数据框中加入多行数据框
问题描述
我想在名为“TrackID”的列上加入数据框“df_1”和“df_2”。
df_1: cluster TrackID
1 a_1
2 a_1
3 a_2
1 a_3
df_2: TrackID Value
a_1 5
a_1 6
a_2 7
a_2 8
a_3 9
Output:
cluster TrackID Value
1 a_1 Vector(5,6)
2 a_1 Vector(5,6)
3 a_2 Vector(7,8)
1 a_3 Vetor(9)
我希望连接的输出看起来像这样。有没有办法我可以做到这一点?
解决方案
如果你对ArrayType 没问题,你可以先通过TrackID聚合第二个数据帧,然后加入第一个数据帧:
import pyspark.sql.functions as F
df_2.groupBy('TrackID').agg(
F.collect_list('Value').alias('Value')
).join(df_1, ['TrackID']).show()
+-------+------+-------+
|TrackID| Value|cluster|
+-------+------+-------+
| a_1|[5, 6]| 1|
| a_1|[5, 6]| 2|
| a_2|[7, 8]| 3|
| a_3| [9]| 1|
+-------+------+-------+
推荐阅读
- r - 我的布局不允许我显示 xlab 和 ylab
- javascript - 浏览器Javascript类(不是node.js)中私有方法的语法是什么?
- php - 用get方法插入是可以的,而post不是。(关于PHP/PDO/HTML)
- javascript - 如何简单地在服务器端节点 JS 中创建 onClick 事件?
- apache-spark - spark-submit --master --local[4] 是否将整个应用程序限制为 4 个核心,或者只是激发工作人员?
- powerbi - 如何在 Power BI 中为 Card 设置默认值
- javascript - 在 NodeJs 中将用户输入打印到控制台
- google-sheets - 谷歌表格 VLOOKUP 替换空白和不适用!细胞
- python - 识别 SDE 数据库 Python 中的非活动/未使用域
- python - 如果满足条件但在列中指定了条件,则熊猫滚动总和