【发布时间】:2016-02-17 19:40:41
【问题描述】:
我正在使用 MapReduce 运行 RFM 分析程序。 OutputKeyClass 是 Text.class,我发出逗号分隔的 R(Recency)、F(Frequency)、M(Monetory)作为来自 Reducer 的键,其中 R=BigInteger、F=Binteger、M=BigDecimal 并且值也是 Text代表 Customer_ID。我知道 Hadoop 根据键对输出进行排序,但我的最终结果有点奇怪。我希望输出键首先按 R 排序,然后按 F 排序,然后按 M 排序。但由于未知原因,我得到以下输出排序顺序:
545,1,7652 100000
545,23,390159.402343750 100001
452,13,132586 100002
452,4,32202 100004
452,1,9310 100007
452,1,4057 100018
452,3,18970 100021
但我想要以下输出:
545,23,390159.402343750 100001
545,1,7652 100000
452,13,132586 100002
452,4,32202 100004
452,3,18970 100021
452,1,9310 100007
452,1,4057 100018
注意:customer_ID 是 Map 阶段的键,属于特定 Customer_ID 的所有 RFM 值在 Reducer 处汇总以进行聚合。
【问题讨论】:
-
hadoop 默认不对其输出进行排序
-
但是您能帮我解决一下吗? @vefthym
-
我猜你需要二次排序,这里解释得很好:stackoverflow.com/a/23078365/2516301
标签: sorting hadoop mapreduce key