需要进行两种数据的关联, 费了好大劲, 最后才使用secondary sort解决
其中有几个地方需要注意:
1 readFields 和 writeFields 的写法需要完全一致, 否则写入和读取的数据就会错乱。 (在此耽搁良久)
2 要override 成员函数hashCode(), 否则“相同”key的数据不一定在唯一的机器上
3 要定义groupbyComparator
在reduce操作之前,
------1 会对数据进行partition: RecordKey.hashCode, 该函数会被partitioner调用, 使得数据分配到不同的reduce机器上。 【因此对于我们的需求需要override】
------2 会使用groupbyComparator对数据进行分组:Comparator.compare()
------3 会排序: RecordKey.compareTo()
------4 要设置Comparator
ps: 自定义了partitioner,Job.setPartitionerClass(class), 但是没起作用。 【0.19.1 0.19.2】, 就是在此耽搁良久, 后来才尝试使用secondary sort