es统计词频,python 词语频率统计
完整代码包edu。qfnu。Hadoop导入org。阿帕奇。Hadoop。糖膏剂配置;导入org。阿帕奇。Hadoop。fs。路径;导入org。阿帕奇。Hadoop。io。long可写;导入org。阿帕奇。Hadoop。io。文本;导入org。阿帕奇。Hadoop。MapReduce。工作;导入org。阿帕奇。Hadoop。MapReduce。映射器;导入org。阿帕奇。Hadoop。MapReduce。减速器;导入org。阿帕奇。Hadoop。MapReduce。lib。输入。文件输入格式;导入组织。阿帕奇。Hadoop。MapReduce。lib。输出。文件输出格式;导入Java。io。io异常;导入Java。util。*;公众的类搜狗{ public static void main(String[]args)抛出IOException,ClassNotFoundException,中断的异常{ Configuration conf=new Configuration();Job job=Job.getInstance(conf,字数);job.setJarByClass(搜狗。类);job.setMapperClass(搜狗SG映射器。类);job.setReducerClass(搜狗SG减速器。类);工作。setoutputkey类(文本。类);工作。setoutputvalueclass(long可写。类);文件输入格式。addinputpath(job,new Path(/input 3 );文件输出格式。setoutputpath(job,new Path(/output 3 ));系统。退出(作业。等待完成(真)?0 : 1);}公共静态类SGMapper扩展MapperLongWritable,Text,Text,long writable { private static final long writable one=new long writable(1);私有文本Text=new Text();@覆盖受保护的空映射(长可写键,文本值,上下文上下文)抛出IOException,中断的异常{ String[]line=value。tostring().拆分( \ t );字符串键=line[2];文本设置(键);context.write(text,one);} }公共静态类SG减速器扩展ReducerText,LongWritable,Text,long writable { Text Text=new Text();HashMapString,Integer map=new HashMap();@ Override protected void reduce(文本键,IterableLongWritable值,上下文上下文)抛出IOException,中断异常{ int sum=0;//键出现次数for(long可写Itext:values){ sum=Itext。get();} } @覆盖受保护的void清理(上下文上下文)抛出IOException,InterruptedException { ListMap .EntryString,Integer list=new LinkedListMap .EntryString,Integer(map。entry set());Collections.sort(list,new ComparatorMap .EntryString,Integer(){ @ Override public int compare(Map .入口字符串,整数o1,地图.EntryString,Integer O2){ return(int)(O2。getvalue()-O1。getvalue());} });对于(图EntryString,Integer e:list){ context。write(new Text(e . getkey()),new long writable(e . getvalue()));} } }} 分析map是读一行执行一次,reduce是每一组执行一次,只用map的reduce是无法控制输出的次数的,无论map或者reduce都有 setUp 和cleanUp而且这两个执行一次所以我们可以在reduce阶段把每一个单词当做key,单词出现的次数当做value,每一组存放到一个map里面,此时只存,不写出。在reduce的cleanUp阶,map排序,然后输出前三名
1.配置。运行数据处理程序之前,需要先初始化配置类,作用是读取数据处理的系统配置信息(包括分布式文件系统的和数据处理的),即安装大数据时的配置文件信息,如core-site.xml,hdfs-site.xml和mapred-site.xml等文件中的信息,代码如下:
配置配置=新配置();2.工作。通过实例化对象工作,可以构建一个任务对象。编写数据处理程序需要实现三个函数类
地图和减少类,以及负责配置数据处理如何运行地图和减少的函数
Job job=Job.getInstance(conf,字数);//conf用于存储作业的配置信息。“字数”是作业的名称,Job . setjarbyclass(sougo 1 . class);//加载完成的计算机程序,比如本例中的程序类名sougo . class job . setmapperclass(WC mapper . class);//加载Map函数的实现类job . setcombinerclass(WC reducer . class);//这个类和MapReduce操作机制有关,去掉也无所谓,但是有job . setreducerclass(WC reducer . class)会让它更高效;//加载Reduce函数的实现类//下面两行代码定义了输入输出的路径job . setoutputkeycalss(text . class);//构建输入数据文件,即存储在hdfs上的最终结果文件的键/值类型job . setoutputvalueclass(intwriteable . class);//生成输出数据文件。3.Text:Text类型使用变长int存储长度,采用utf-8编码格式,String为Unicode编码格式。
4.Long Writable:Long Writable的键是行的偏移量,表示行在文件中的位置而不是行号,IntWritable的键是行号。
5.上下文:上下文
6.tree_map.keySet()该方法返回一个按升序排列的树映射键集。键的唯一性由TreeMap内部的二叉树原理保证,TreeMap的所有键都是按照一定的顺序排列的。地图接口的获取方法:
Get (objectkey):返回由指定键映射的值。如果映射不包含键的映射关系,则返回null 7.entrySet()返回映射中包含的映射关系的集合集合(一个关系就是一个键-值对),即键-值作为一个整体逐个存储在集合集合集合中。
Map函数
Map(长可写键,文本值,上下文context)三个参数,key和value是输入键和值,context是输入键和值的记录,context通过write(key,value)方法添加参数。
MapperKEYIN,VALUEIN,KEYOUT,VALUEOUT,都是功能性的,只需要类型。进入map函数的键是行号,值是每行的内容,退出的键是每个单词,值是单词数的列表,map()是指定参数类型和参数的方法名。
公共静态类SGMapper扩展MapperLongWritable,Text,Text,long writable { private static final long writable one=new long writable(1);//切分后每个词的值为1私有文本Text=new Text();@ Override protected void map(long writable键,Text值,Context上下文)抛出IOException,interrupted exception { String[]line=value . tostring()。拆分( \ t );//用“\ t”字符串键=line [2]分隔每一行数据;//取每行的第三个text . set(keys);//将键赋给text context.write(text,one);//将键值对写入上下文中的}}Reduce函数
reduc函数的输入也是键/值的形式,但是它的值
是迭代器IteratorLongWritable(或者IntWritable但对应前面的map函数)。
公共静态类SGReducer扩展ReducerText,LongWritable,Text,long writable { Text Text=new Text();HashMapString,Integer map=new HashMap();//创建一个新的HashMap来存储数据。HashMap的随机访问速度最快@ override protected void reduce(text key,iterablelongwriteable values,context context)ThrowsioException,中断异常{intsum=0在Java set//key for(long writeable itext:values)的出现次数{//合并映射结果得到词频的统计值sum=itext . get();} } Reduce接收的数据是bye,1,1,1,1,1 Hadoop,1,1,1,1,1,1,1,1,1,1,1,1 Hello,1,1的形式。然后reduce函数将这个变量值数组中的值循环相加,分别统计每个词出现的总次数。最终输出结果是bye,4 Hadoop。
Reduce函数的cleanup()方法
受保护的空隙清理(上下文上下文)引发IOException,InterruptedException { ListMap .EntryString,Integer list=new LinkedListMap .EntryString,Integer(map。entry set());Collections.sort(list,new ComparatorMap .EntryString,Integer(){ @Override//使用收集工具类,用自定义的排序方法对结果按照价值值,即单词个数降序排列公共(同Internationalorganizations)国际组织比较(地图.入口字符串,整数o1,地图.EntryString,Integer O2){ return(int)(O2。getvalue()-O1。getvalue());} });对于(图EntryString,Integer e:list){ context。write(new Text(e . getkey()),new long writable(e . getvalue()));//将单词与统计值输出到文件中} } }数据
链接:https://潘。百度一下。com/s/1 iejttcoep 4 ppjyzla 6 lokw
提取码:uhlo
一篇关于数据处理的好文章
https://www.cnblogs.com/sharpxiajun/p/3151395.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。