我有一个rdd,需要从中提取多个事件的计数。初始rdd看起来像这样
+----------+--------------------+-------------------+
| event| user| day|
+----------+--------------------+-------------------+
|event_x |user_A | 0|
|event_y |user_A | 2|
|event_x |user_B | 2|
|event_y |user_B | 1|
|event_x |user_A | 0|
|event_x |user_B | 1|
|event_y |user_B | 2|
|event_y |user_A | 1|
+----------+--------------------+-------------------+
我需要为每种类型的事件(在这种情况下为2种类型的事件:event_x和event_y)设置一个计数列,并按玩家和日期分组。到目前为止,我仅通过一个事件就做到了,结果如下:
+--------------------+-------------------+------------+
| user| day|count(event)|
+--------------------+-------------------+------------+
|user_A | 0| 11|
|user_A | 1| 8|
|user_A | 2| 4|
|user_B | 0| 2|
|user_B | 1| 1|
|user_B | 2| 25|
+--------------------+-------------------+------------+
但是我需要任意多列,因为列数与上面显示的第一个rdd最左列中出现的事件数相同。因此,如果我只有2个事件(x和y),则应该是这样的:
+--------------------+-------------------+--------------+--------------+
| user| day|count(event_x)|count(event_y)|
+--------------------+-------------------+--------------+--------------+
|user_A | 0| 11| 3|
|user_A | 1| 8| 23|
|user_A | 2| 4| 2|
|user_B | 0| 2| 0|
|user_B | 1| 1| 1|
|user_B | 2| 25| 11|
+--------------------+-------------------+--------------+--------------+
我当前拥有的代码是:
rdd = rdd.groupby('user','day').agg({'event': 'count'}).orderBy('user','day')
我应该怎么做才能达到预期的效果?
预先感谢;)