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四种方式实现词频统计的更多相关文章

  1. Spark入Hbase的四种方式效率对比

    一.方式介绍 本次测试一种采用了四种方式进行了对比,分别是:1.在RDD内部调用java API.2.调用saveAsNewAPIHadoopDataset()接口.3.saveAsHadoopDat ...

  2. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  3. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  4. ASP.NET MVC之下拉框绑定四种方式(十)

    前言 上两节我们讲了文件上传的问题,关于这个上传的问题还未结束,我也在花时间做做分割大文件处理以及显示进度的问题,到时完成的话再发表,为了不耽误学习MVC其他内容的计划,我们今天开始好好讲讲关于MVC ...

  5. SWT组件添加事件的四种方式

    在我们CS日常开发过程中会经常去为组件添加事件,我们常用的为AWT与SWT.SWT的事件模型是和标准的AWT基本一样的.下面将按照事件的四种写法来实现它. 一.匿名内部类的写法 new MouseAd ...

  6. Java实现文件复制的四种方式

    背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...

  7. C#_批量插入数据到Sqlserver中的四种方式

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  8. java 20 -10 字节流四种方式复制mp3文件,测试效率

    电脑太渣,好慢..反正速率是: 高效字节流一次读写一个字节数组 > 基本字节流一次读写一个字节数组 > 高效字节流一次读写一个字节 > 基本字节流一次读写一个字节 前两个远远快过后面 ...

  9. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

  10. JavaScript表单提交四种方式

    总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...

随机推荐

  1. 一键自动化博客发布工具,用过的人都说好(oschina篇)

    oschina和segmentfault一样,界面非常的清爽. 界面上除了必须的标题,内容之外,还有文章专辑和推广专区这几个选项. 一起来看看在blog-auto-publishing-tools中, ...

  2. fastposter v2.8.0 发布 电商海报编辑器

    fastposter v2.8.0 发布 电商海报编辑器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.二维码海报,图片海报,分享海报,二维 ...

  3. Vue-Plugin-HiPrint

    Vue-Plugin-HiPrint 是一个Vue.js的插件,旨在提供一个简单而强大的打印解决方案.通过 Vue-Plugin-HiPrint,您可以轻松地在Vue.js应用程序中实现高度定制的打印 ...

  4. vscode开发uniapp

    VS Code 对 TS 类型支持友好,前端开发者主流的编辑器 HbuilderX 对 TS 类型支持暂不完善,期待官方完善 工作区禁用 Vetur 插件(Vue2 插件和 Vue3 插件冲突) 工作 ...

  5. angular自定义属性指令

    在angular中有三种类型的指令: 组件–拥有模板的指令: 结构性指令–通过添加和移除DOM元素改变DOM布局的指令; 属性型指令–改变元素.组件或其他指令的外观和行为的指令: 组件是这三种指令中最 ...

  6. NETCore中实现一个轻量无负担的极简任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...

  7. SpringCloud解决feign调用token丢失问题

    背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免.那么就需要服务之间的通过feignClient发起请求,获取需要 ...

  8. selenium 滚动截图参考

    Selenium本身并不直接支持滚动截图,但是你可以通过编程方式实现滚动截图.下面是一个Python的例子,使用Selenium和PIL库实现滚动截图: from selenium import we ...

  9. golang beego 使用supervisor 部署后台进程管理. 静态文件找不到的解决办法.

    directory=/root/go/src/you_self_dir 请在客户端配置文件*.ini中加入一行命令, 等于号后面就是自己的项目目录,这时就能找到项目文件了.

  10. C#使用WebView2替代Electron

    C#想要实现Electron那样混合桌面程序可以用以下几个库.本文使用EdgeSharp NanUI​github.com/NetDimension/NanUI Photino​github.com/ ...