Python Hadoop流,二级排序问题

时间:2014-06-26 17:34:34

标签: algorithm sorting hadoop mapreduce hadoop-streaming

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流可以实现的吗?如果没有,那么你建议的更好的方法是什么?非常感谢!!

1 个答案:

答案 0 :(得分:1)

在你的映射器中,你可以发出userid作为键,timestampserviceId作为按timestamp排序的值(为了执行排序操作,我假设所有的每个用户的行数可以放在主内存中。)

然后MR框架将负责将每个用户的所有不同行发送到单个reducer,您可以轻松地在那里执行分析。

如果每个用户的行数太多(比如数百万),则可以将userId-serviceId作为键发出,在缩减阶段之后,每个user-service都会有一个行文件,并且花费的时间在那个服务上。如果需要,您可以使用getmerge

加入所有这些文件