自定义的 Partitioner 是 Hadoop 中Reduce输出结果分类的利器。用它你可以把不同类型的数据结果扔到不同的文件里,直观、方便,统计起来也更清晰。

输入数据结构有点意思,像Kaka 1 28这种,有的超长,有的太短,有的刚刚好。你需要做的,就是根据长度把它们分成三类——正常、过长、过短,输出成三个文本文件。

Partitioner 接口核心方法是getPartition(Text key, Text value, int numPartitions),注意这个numPartitions是 Reduce 个数,想本地跑,最多只能用一个 Reduce。

逻辑比较简单,比如你可以判断value的长度来决定返回哪个分区号。比如:太短返回 0,正常返回 1,太长返回 2。是不是蛮直观?

推荐你顺带看看这篇HDFS API 与 Partitioner 重写示例,代码和思路都比较接地气。另外,还有一些关于分区数据的文章,也挺有参考价值,比如Hadoop 海量数据分类应用

如果你正好要做数据清洗或者日志分类,这种按数据内容分区的做法真的蛮省事。记得测试时候加点边界数据,比如超长或空值的,防止跑飞了。