javaApi,mapreduce,awk,scala四种方式实现词频统计
awk方式实现词频统计:
方式一:
vi wordcount.awk
{
for (i = 1; i <=NF;i++) //NF 表示的是浏览记录的域的个数
freq[$i]++
}
END{
for(word in freq) //
printf "%s%d\n",word,freq[word] //
}
运行:awk -f wordcount.awk words.txt;
----------------------------------
方式二:
运行方式二:
vi wordcount_awk.sh
#!/bin/sh
awk -F " " '{
for (i = 1; i<=NF; i++)
freq[$i]++
}
END{
for (word in freq)
printf "%s%d\n",word,freq[word]
}' $1 chmod u+x wordcount_awk.sh
./wordcount_awk.sh words.txt
----------------------------- NF 表示的是浏览记录的域的个数
$NF 表示的最后一个Field(列),即输出最后一个字段的内容 [root@localhost SHELL]# free -m | grep buffers\/
-/+ buffers/cache: 1815 1859
[root@localhost SHELL]# free -m | grep buffers\/ | awk '{print $NF}'
1859
[root@localhost SHELL]# free -m | grep buffers\/ | awk '{print NF}'
4
[root@localhost SHELL]#
--------------------------------
%x代表十六进制
%o是八进制
%d或%i代表十进制整数,
%c是字符
%s是字符串,
%f或%e是输入实数,小数或指数输入都可以
%ld是long double型
%%输入一个百分号。
javaApi方式实现词频统计:
package cn.WordTongJi; import java.io.*;
import java.util.HashMap;
import java.util.Map; /**
* Created by Administrator on 2018/6/1 0001.
*/
public class WordDemo {
public static void main(String[] args) throws IOException {
//读取文件内容,获取文件对象
BufferedReader br =new BufferedReader(new FileReader("D:\\test\\aaa.txt"));
//根据对象获取单词
String nextLines=""; Map<String,Integer> map = new HashMap<String,Integer>();
while ((nextLines=br.readLine())!=null){
//以空格拆分单词,获取到单词数组
String[] data =nextLines.split(" ");
//将单词放进Map中,利用for循环,遍历
for(String word:data){
//先在循环外定义一个hashmap
//将单词放进map中
//<单词,1>的形式
map.put(word,1);
}
}
//遍历map中的单词
//KeySet():将Map中所有的键存入到set集合中
for(String key:map.keySet()){
//根据key值,计算key值对应的value值
System.out.println(key+"----"+map.get(key));
}
}
}
mapreduce实现词频统计:
package cn.bcqm1711.mr.day01;/**
* Created by Administrator on 2018/5/2.
*/ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner; import java.io.IOException; /**
* @author :YongKe.Pan
* @Desc : 自定义词频统计
* @create 2018-05-02 9:44
**/ public class CustomWordCount { //MapTask阶段:默认情况下一个数据块对应一个split分片,一个分片对应一个MapTask
//LongWritable, Text表示的是每一行的偏移量和每一行内容的数据类型
//Text, IntWritable表示的是每一个map输出key/value的数据类型
public static class WCMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private static final IntWritable one = new IntWritable(1);
private Text word = new Text(); //在开始业务代码之前调用一次
@Override
protected void setup(Context context) throws IOException, InterruptedException { } //编写业务逻辑代码,每一行调用一次这个map方法
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//获取每一行的内容
String line = value.toString();
//拆分行获取单词
String[] words = line.split(" ");
for (String wd : words) {
word.set(wd);
//输出到本地磁盘:<单词,1>
context.write(word, one);
}
} //业务代码执行完成之后,最后调用一次cleanup
@Override
protected void cleanup(Context context) throws IOException, InterruptedException { }
} //ReducerTask阶段
//Text, IntWritable两个参数接收的是mapTask输出的key/value数据类型
//Text, IntWritable ReducerTask阶段对接收到的数据业务处理之后输出到hdfs系统的key/value数据类型
public static class WCReduce extends Reducer<Text, IntWritable, Text, IntWritable> {
//在开始执行Reduce业务代码之前调用一次
@Override
protected void setup(Context context) throws IOException, InterruptedException { } //key的hashcode码相同的被分配到一个Reduce
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable v : values) {
sum += v.get();
}
//将聚合之后的单词及次数输出到HDFS
context.write(key, new IntWritable(sum));
} //处理完Reduce业务代码之后用一次
@Override
protected void cleanup(Context context) throws IOException, InterruptedException { }
} //job作业的驱动部分
public static void main(String[] args) throws Exception {
//获取配置对象
Configuration conf = new Configuration();
//CustomWordCount是作业的名称,可以在历史服务器上方便查看
//Job job=new Job();
Job job = Job.getInstance(conf, "CustomWordCount");
//设置程序的入口类
job.setJarByClass(CustomWordCount.class); //封装MapTask阶段
job.setMapperClass(WCMapper.class);//设置map阶段的业务处理代码
job.setMapOutputKeyClass(Text.class);//告诉mr框架map输出key的数据类型
job.setMapOutputValueClass(IntWritable.class);//告诉mr框架,map输出value的数据类型
//接收main方法的参数(在提交运行job时传入的参数:/words3.txt)
FileInputFormat.addInputPath(job,new Path(args[0])); //告诉mr阶段要处理的文件路径 //封装ReduceTask阶段
job.setReducerClass(WCReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//将数据输出到hdfs系统的哪个文件(/out0502)
FileOutputFormat.setOutputPath(job,new Path(args[1]));
job.setPartitionerClass(HashPartitioner.class); job.setNumReduceTasks(2);
//提交job
boolean isOk = job.waitForCompletion(true);
System.exit(isOk ? 0 : 1);
}
}
scala方式实现词频统计:
package cn.qmScala.day04Scala /**
* Created by Administrator on 2018/6/2 0002.
*/
object Demo15WordCount {
val acc =true def main(args: Array[String]) {
val data =Array("jin tian tian qi bu cuo xiang chu qu wan ")
//拆分出单词.使用flatMap方法
val words:Array[String]=data.flatMap(_.split(" "))
//单词->(单词,1)的形式
val word_one:Array[(String,Int)]=words.map((_,1))
//分组
val groupByWord:Map[String,Array[(String,Int)]]=word_one.groupBy(_._1)
//1.统计每个单词的个数
val words_times:Map[String,Int]=groupByWord.mapValues(_.size)
//for((k,v)<- words_times)println(s"$k,$v")
//2.按单词出现的次数排序.将单词放进集合中,通过集合的方法来进行排序
val wordsTimesList:List[(String,Int)]=words_times.toList
//val wordCountTimeSort:List[(String,Int)]=wordsTimesList.sortBy(_._2)
val wordCountTimeSort:List[(String,Int)]=wordsTimesList.sortBy(_._2)
// for((k,v)<- wordCountTimeSort)println(s"$k,$v")
//3.求最大的前三个次数最多的单词.....scala的方法
val wordCountTop3=wordCountTimeSort.take(3)
for((k,v)<- wordCountTop3)println(s"$k,$v")
}
}
javaApi,mapreduce,awk,scala四种方式实现词频统计的更多相关文章
- Spark入Hbase的四种方式效率对比
一.方式介绍 本次测试一种采用了四种方式进行了对比,分别是:1.在RDD内部调用java API.2.调用saveAsNewAPIHadoopDataset()接口.3.saveAsHadoopDat ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...
- ASP.NET MVC之下拉框绑定四种方式(十)
前言 上两节我们讲了文件上传的问题,关于这个上传的问题还未结束,我也在花时间做做分割大文件处理以及显示进度的问题,到时完成的话再发表,为了不耽误学习MVC其他内容的计划,我们今天开始好好讲讲关于MVC ...
- SWT组件添加事件的四种方式
在我们CS日常开发过程中会经常去为组件添加事件,我们常用的为AWT与SWT.SWT的事件模型是和标准的AWT基本一样的.下面将按照事件的四种写法来实现它. 一.匿名内部类的写法 new MouseAd ...
- Java实现文件复制的四种方式
背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...
- C#_批量插入数据到Sqlserver中的四种方式
先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...
- java 20 -10 字节流四种方式复制mp3文件,测试效率
电脑太渣,好慢..反正速率是: 高效字节流一次读写一个字节数组 > 基本字节流一次读写一个字节数组 > 高效字节流一次读写一个字节 > 基本字节流一次读写一个字节 前两个远远快过后面 ...
- .NET MVC控制器向视图传递数据的四种方式
.NET MVC控制器向视图传递数据的四种方式: 1.ViewBag ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...
- JavaScript表单提交四种方式
总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...
随机推荐
- 12、web 中间件加固-apache 加固
1.账号设置 1.1.防止 webshell 越权使用 修改 httpd.conf:/etc/httpd/conf/httpd.conf 或编译路径下 /conf/httpd.conf 检查程序启动账 ...
- SpringBoot-mybatis-plus 分页
前言: 想必数据分页对于每一个程序员并不陌生,针对分页查询功能代码实现上:肯定是代码简洁明了且能达到分页的效果会更好! 现在我将基于SpringBoot - mybatisPlus分页查询的方法总结如 ...
- 莫队算法(基础莫队)小结(也做markdown测试)
莫队 基础莫队 本质是通过排序优化了普通尺取法的时间复杂度. 考虑如果某一列询问的右端点是递增的,那么我们更新答案的时候,右指针只会从左往右移动,那么i指针的移动次数是$O(n)$的. 当然,我们不可 ...
- leaflet 河流颜色渐变效果
1.Leaflet-polycolor github地址:https://github.com/Oliv/leaflet-polycolor 插件缺陷:需要把每个折点的颜色都指定才行,一般做不到 2. ...
- ansible自定义模板部署apache服务
使用Ansible来部署Apache服务是一个很好的选择,因为它可以自动化部署过程,确保所有的服务器上都有相同的配置.以下是一个简单的步骤指南,展示如何使用Ansible来部署Apache服务: 1 ...
- java的synchronized有几种加锁方式
在Java中,synchronized关键字提供了内置的支持来实现同步访问共享资源,以避免并发问题.synchronized主要有三种加锁方式: 1.同步实例方法 当一个实例方法被声明为synchro ...
- C# 方块热力图
这张图右侧,0 3 6...... 30表示每个数字出现的次数,左侧就是每个数字出现次数的方块颜色图. 具体的思路是,找两个颜色 渐变的画出右侧的色条. 计算所有数字的最大最小次数,然后用他们色条 ...
- mit 6.824 lab1 思路贴
前言 为遵守 mit 的约定,这个帖子不贴太多具体的代码,主要聊聊自己在码代码时的一些想法和遇到的问题. 这个实验需要我们去实现一个 map-reduce 的功能.实质上,这个实验分为两个大的板块,m ...
- Android OpenMAX(八)如何学习OMXNodeInstance
前面一篇文章中我们看到media.codec service创建OMX组件后会把组件传递给一个OMXNodeInstance对象,并且把OMXNodeInstance对象返回到Framework层,F ...
- 在 Flask 项目中配置 Session:简明指南
在 Flask 项目中配置 Session:简明指南 本文介绍如何在 Flask 项目中配置会话 1. Flask 内置会话 Flask 自带会话管理功能,使用客户端 Cookie 存储会话数据.默认 ...