2018-07-29期 MapReduce实现对字符串进行排序

package cn.sjq.mr.sort.number;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.NullWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.junit.Test;

/**

* MapReduce字符串排序,字符串排序是按照数据字典顺序进行排序

* 这里所有的类采用匿名内部类实现

* @author songjq

*

*/

public class StringSort {

/**

* 对字符串进行排序Mapper类

* @author songjq

*

*/

static class StringSortMapper extends Mapper<LongWritable, Text, Text, NullWritable> {

private Text tkey = new Text();

@Override

protected void map(LongWritable k1, Text v1, Context context)

throws IOException, InterruptedException {

String line = v1.toString();

//分词 格式:Wait Events Statistics

String[] split = StringUtils.split(line," ");

for(int i=0;i<split.length;i++) {

tkey.set(split[i]);

context.write(tkey, NullWritable.get());

}

}

}

/**

* MapReduce提交job类

* 这里采用MapReduce默认的比较器进行字符串的升序排序

* 执行结果:

* Activity

Advisory

Buffer

Cache

Cache

Dictionary

Events

IO

Instance

...

* @throws Exception

*/

@Test

public void StringSortJob() throws Exception {

Job job = Job.getInstance(new Configuration());

job.setJarByClass(StringSort.class);

job.setMapperClass(StringSortMapper.class);

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(NullWritable.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(NullWritable.class);

//采用MapReduce默认排序规则

//job.setSortComparatorClass(cls);

FileInputFormat.setInputPaths(job, new Path("D:\\test\\tmp\\sort\\Strings.data"));

FileOutputFormat.setOutputPath(job, new Path("D:\\test\\tmp\\sort\\out5"));

job.waitForCompletion(true);

}

/**

* 自定义StringSortMyComparator比较器,继承Text.Comparator重写compare方法,实现对字符串降序排序

* @author songjq

*

*/

static class StringSortMyComparator extends Text.Comparator{

//只需要在super前面加 - 即可实现降序排序

@Override

public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {

return -  super.compare(b1, s1, l1, b2, s2, l2);

}

}

/**

* MapReduce提交job类

* 这里采用自定义比较器StringSortMyComparator实现对字符串的降序排序

* 执行结果:

* Latch

Instance

IO

Events

Dictionary

Cache

Cache

Buffer

Advisory

Activity

...

* @throws Exception

*/

@Test

public void StringSortUseMyComparatorJob() throws Exception {

Job job = Job.getInstance(new Configuration());

job.setJarByClass(StringSort.class);

job.setMapperClass(StringSortMapper.class);

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(NullWritable.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(NullWritable.class);

//采用自定义比较器实现对字符串降序排序

job.setSortComparatorClass(StringSortMyComparator.class);

FileInputFormat.setInputPaths(job, new Path("D:\\test\\tmp\\sort\\Strings.data"));

FileOutputFormat.setOutputPath(job, new Path("D:\\test\\tmp\\sort\\out6"));

job.waitForCompletion(true);

}

}

原文地址:http://blog.51cto.com/2951890/2151971

时间: 2024-11-13 07:54:42

2018-07-29期 MapReduce实现对字符串进行排序的相关文章

饥饿疗法是目前唯一确信能够延缓衰老的办法:4星|《三联生活周刊》2018年3期

三联生活周刊·人类到底能活多久:抗衰老科学指南(2018年3期) 本期主题是抗衰老,科学记者袁越走访了全球抗衰老研究的顶级机构,把这个领域最前沿的进展深入浅出地展现出来,非常有价值.这一类报道也是国内比较稀缺的. 总体评价4星. 以下是书中一些内容的摘抄,#号后面是kindle电子版中的页码,[]中是我根据上下文补充的信息: 1:2016年世界人均一次性能源消费量为1.87吨油当量,中国为2.25吨,相比十几年前还不足1吨有了飞跃,但只相当于经合组织(OECD)4.5吨的一半.OECD目前有34

Android 4.4 KitKat升级率已经接近18%(2014-07-09 07:29)

腾讯数码讯(编 译:张秀梅)按照惯例, 每个月的第一个星期的星期一谷歌都会发布最新一期Android版本分布图.从去年十月末谷歌发布Android 4.4 KitKat以来,截止到目前为止Android 4.4 KitKat的升级率以及占到了所有Android设备的18%份额,增长势头非常凶猛. 在 最新一个月的Android版本分布图中一个显著的特征就是除了Android 4.4 KitKat在保持快速持续得增长外,其他的Android在占有率上都有不同程度的下降.Android 4.4 Ki

沈阳当年对学校承认了他和高岩的性关系:3星|《三联生活周刊》2018年16期

三联生活周刊·教授的权力:高校内的不平等关系(2018年16期) 本期主题是高校教师性侵学生的调查与思考. 总体评价3星,有参考价值. 以下是书中一些内容的摘抄,#号后面是kindle电子版中的页码: 1:自第二次世界大战以来,以色列制造的暗杀事件比任何西方国家都多.该国领导人甚至认为通过杀戮指定的目标保护其国家安全,危害无辜平民的生命是合情合理的.#52 2:旅游业难以聚集大量的财富,给其从业者带来的回报也有限,这就是为什么海南成了高消费的代名词,可当地人收入却普遍不高的原因.这也可以说是资源

Python学习之路—2018/6/29

Python学习之路-2018/6/29 1.跨表查询 跨表查询: 基于对象查询 基于双下划线查询 聚合和分组查询 F与Q查询 F查询 过滤器只能讲字段值与常量进行比较,如果需要用到与字段值进行比较则需要用到F查询,F查询还支持与常量之间的加减乘除的运算.数据: # 查询评论数大于阅读数的书籍 >>> Book.objects.filter(comment_count__gt=F("read_count")) <QuerySet [<Book: 斗破苍穹&

2018 07 14 题解

2018 07 14 T1 Description给出一个长度为 n 的序列 A,求这个序列的最长上升子序列的长度. HintO(NlogN)模板题,不赘述了 Code #include <set> #include <cmath> #include <queue> #include <cstdio> #include <string> #include <cstring> #include <iostream> #inc

AI Summit(2018.07.19)

AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店 原文地址:https://www.cnblogs.com/xuefeng1982/p/10331578.html

Heshen&#39;s Account Book HihoCoder - 1871 2018北京区域赛B题(字符串处理)

Heshen was an official of the Qing dynasty. He made a fortune which could be comparable to a whole country's wealth by corruption. So he was known as the most corrupt official in Chinese history. But Emperor Qianlong liked, or even loved him so much

Java TreeSet集合排序 &amp;&amp; 定义一个类实现Comparator接口,覆盖compare方法 &amp;&amp; 按照字符串长度排序

package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式

深入理解苹果系统(Unicode)字符串的排序方法

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由iminder发表于云+社区专栏 Unicode编码 我们知道计算机是不能直接处理文本的,而是和数字打交道.因此,为了表示文本,就建立了一个字符到数字的映射表,叫做编码.最著名的字符编码就是ASCII了,它使用7-bit来表示应用字母表以及数字和其他字符.这对于英语来说是够用了,但是对于其他语言,这个7-bit就不能满足条件了,因为字符远远超过了7-bit所能表示的最大个数.因此1987年,来自几个大的科技公司的工程师开始合作开发