java sort set_Java Job.setSortComparatorClass方法代码示例

import org.apache.hadoop.mapreduce.Job; //导入方法依赖的package包/类

private void testComparator(String keySpec, int expect)

throws Exception {

String root = System.getProperty("test.build.data", "/tmp");

Path inDir = new Path(root, "test_cmp/in");

Path outDir = new Path(root, "test_cmp/out");

conf.set("mapreduce.partition.keycomparator.options", keySpec);

conf.set("mapreduce.partition.keypartitioner.options", "-k1.1,1.1");

conf.set(MRJobConfig.MAP_OUTPUT_KEY_FIELD_SEPERATOR, " ");

Job job = MapReduceTestUtil.createJob(conf, inDir, outDir, 1, 1,

line1 +"\n" + line2 + "\n");

job.setMapperClass(InverseMapper.class);

job.setReducerClass(Reducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(LongWritable.class);

job.setSortComparatorClass(KeyFieldBasedComparator.class);

job.setPartitionerClass(KeyFieldBasedPartitioner.class);

job.waitForCompletion(true);

assertTrue(job.isSuccessful());

// validate output

Path[] outputFiles = FileUtil.stat2Paths(getFileSystem().listStatus(outDir,

new Utils.OutputFileUtils.OutputFilesFilter()));

if (outputFiles.length > 0) {

InputStream is = getFileSystem().open(outputFiles[0]);

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

String line = reader.readLine();

//make sure we get what we expect as the first line, and also

//that we have two lines (both the lines must end up in the same

//reducer since the partitioner takes the same key spec for all

//lines

if (expect == 1) {

assertTrue(line.startsWith(line1));

} else if (expect == 2) {

assertTrue(line.startsWith(line2));

}

line = reader.readLine();

if (expect == 1) {

assertTrue(line.startsWith(line2));

} else if (expect == 2) {

assertTrue(line.startsWith(line1));

}

reader.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值