algorithm - Python Hadoop 流式处理,二次排序问题

标签 algorithm sorting hadoop mapreduce hadoop-streaming

这里是 Hadoop 新手。我有一些这样的用户事件日志,useridtimestamp 都是随机排序的:

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

我想获得按userid 排序的中间结果,然后是timestamp,如下所示:

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

最佳答案

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

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

如果每个用户有太多行(比如数百万),您可以发出 userId-serviceId 作为键,并且在 reduce 阶段之后,您将为每个 用户创建一个行文件-service 以及花在该服务上的时间。如果需要,您可以使用 getmerge 加入所有这些文件。

关于algorithm - Python Hadoop 流式处理,二次排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24436841/

相关文章:

ios - 如何按 nextTriggerDate 对 UNNotificationRequests 数组进行排序

java - Hadoop java.lang.RuntimeException : java. lang.NoSuchMethodException

sql - 如何将 ElasticSearch 查询传递给 hadoop

Python:将列表排序为多个列表或字典

javascript - React 按 obj 日期对数组进行排序

c++ - 稳定的婚姻问题幸福系数

c++ - 如何在矩阵中搜索相同值的区域?

hadoop - Apache Spark 在 YARN 中部署时如何处理系统故障?

PHP 自定义编码函数没有给出所需的结果

algorithm - 找到分钟。 "join"序列操作