Mapreduce:词典排序。 Text和Int类型

时间:2016-05-25 22:46:59

标签: java hadoop mapreduce cloudera

我有一个map reduce工作,可以对这里找到的数据进行排序: http://archive.ics.uci.edu/ml/datasets/Bank+Marketing

我目前有一份工作可以对文件进行排序并输出以下格式的键值对: 教育类型,银行余额,工作,婚姻状况,贷款审批。

这很接近完美。如果有多个人是相同的,我会得到一个已编辑过的列表,旁边有一个数字。

我想要做的是编辑列表的排序方式,而不必运行多个作业或更改输出顺序。

输出的一个例子是:

unknown, 970, unemployed, married, yes  1
unknown, 9716, housemaid, married, no   1
unknown, 973, services, divorced, no    1
unknown, 973, services, divorced, yes   2
unknown, 974, services, single, no  1
unknown, 975, entrepreneur, married, no 1
unknown, 975, technician, divorced, no  1
unknown, 976, bluecollar, married, no   1
unknown, 98, admin, married, no 1

虽然输出按教育类型排序(在这种情况下未知),但我想更改输出中的顺序,使它们按降序平衡顺序排序,而不按字典顺序排序。 EG:

unknown, 98, admin, married, no 1
unknown, 970, unemployed, married, yes  1
unknown, 973, services, divorced, no    1
unknown, 973, services, divorced, yes   2
unknown, 974, services, single, no  1
unknown, 975, entrepreneur, married, no 1
unknown, 975, technician, divorced, no  1
unknown, 976, bluecollar, married, no   1
unknown, 9716, housemaid, married, no   1

以下问题说我需要将密钥类型更改为类似于intwritable,但我不能这样做,因为我已经先按文本值排序了。 How to override the default sorting of Hadoop

TLDR:我是否必须运行多个作业才能按键中的两个单独的变量类型进行排序?

1 个答案:

答案 0 :(得分:1)

找到正确的方法来执行此操作。对于所有看起来的人来说,需要进行二次排序。

我在这里使用了这些文件:

https://www.safaribooksonline.com/library/view/data-algorithms/9781491906170/ch01.html

了解实施情况。