我有一个有多个 Activity
对于给定的 Event
像这样:
+-------+--------+
| Event|Activity|
+-------+--------+
|2646922| 15400|
|2646922| 15399|
|2646922| 90664|
|2646922| 11512|
+-------+--------+
以及每个 Activity
有多个 RESULT
这样的价值观:
+-------+--------+------+
| Event|Activity|RESULT|
+-------+--------+------+
|2646922| 15400| 399.9|
|2646922| 15400| 400.1|
|2646922| 15400| 400|
|2646922| 15400|400.03|
|2646922| 15400|399.93|
|2646922| 15400| 400.1|
|2646922| 15400|399.99|
|2646922| 15400| 400.1|
|2646922| 15400| 400|
|2646922| 15400| 400.1|
|2646922| 15400| 400.1|
|2646922| 15400| 400.1|
|2646922| 15400|399.91|
|2646922| 15400| 400|
|2646922| 15400|400.13|
|2646922| 15400| 400.2|
|2646922| 15400|399.92|
|2646922| 15400| 400|
|2646922| 15400|400.28|
|2646922| 15400| 399.3|
+-------+--------+------+
我想分组 Event
循环聚合 Activity
. 例如,我想找出 RESULT
在活动中 15399, 90664, 11512
在 Event=2646922
没有 Activity=15400
. 然后找出 RESULT
在活动中 15400, 90664, 11512
没有 Activity=15399
等等。
通常在python中,我们会对每个事件使用for循环。在pyspark中有没有一种有效的方法可以做到这一点?我需要用字典还是元组?
如果你有任何见解,我将不胜感激。谢谢您
1条答案
按热度按时间e4yzc0pl1#
假设
df
是您的Dataframe。我想找出活动15399、90664、11512中的结果平均值,在事件=2646922,没有活动=15400的情况下
在活动15400、90664、11512中查找结果的平均值(无活动)=15399
如果您想一个接一个地排除每个活动,您需要创建一个cartesion join with condition
left.event = right.event and left.activities != right.activites
. 因此,对于每个活动编号,您将拥有其他活动的所有结果,并且您可以执行一个简单的分组方式。如果我使用你的示例Dataframe,第一个是
df1
第二个呢df2
. 正如您所说的,它是一个大Dataframe,您应该应用distinct来创建df1
应用我的代码。