Hadoop新手在这里。我有一些像这样的用户事件日志,用户ID 和时间戳都是随机排序的:
userid timestamp serviceId
aaa 2012-01-01 13:12:23 4
aaa 2012-01-01 12:11:52 3
ccc 2012-01-03 08:13:07 3
bbb 2012-01-02 02:34:12 8
aaa 2012-01-02 01:09:47 4
ccc 2012-01-02 12:15:39 4
我希望获得按用户ID 排序的中间结果,然后时间戳,如下所示:
aaa 2012-01-01 12:11:52 3
aaa 2012-01-01 13:12:23 4
aaa 2012-01-02 01:09:47 4
bbb 2012-01-02 02:34:12 8
ccc 2012-01-02 12:15:39 4
ccc 2012-01-03 08:13:07 3
所以我的Reducer可以很容易地解析它。
最终目标是计算用户在不同服务(serviceIds)上花费的时间。这是使用Python Hadoop流可以实现的吗?如果没有,那么你建议的更好的方法是什么?非常感谢!!
答案 0 :(得分:1)
在你的映射器中,你可以发出userid
作为键,timestamp
和serviceId
作为按timestamp
排序的值(为了执行排序操作,我假设所有的每个用户的行数可以放在主内存中。)
然后MR框架将负责将每个用户的所有不同行发送到单个reducer,您可以轻松地在那里执行分析。
如果每个用户的行数太多(比如数百万),则可以将userId-serviceId
作为键发出,在缩减阶段之后,每个user-service
都会有一个行文件,并且花费的时间在那个服务上。如果需要,您可以使用getmerge