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. Ryght 在 Hugging Face 专家助力下赋能医疗保健和生命科学之旅

    本文是 Ryght 团队的客座博文. Ryght 是何方神圣? Ryght 的使命是构建一个专为医疗保健和生命科学领域量身定制的企业级生成式人工智能平台.最近,公司正式公开了 Ryght 预览版 平台 ...

  2. 06 curl 操作elasticsearch的CRUD

    目录 查看健康状态 查询当前es集群中所有的indices 创建索引并配置: 创建索引 删除索引 获取mapping 创建mapping 添加字段 插入记录 检索 修改 删除 中文文档: https: ...

  3. Pr 的导出视频

    导出视频 https://www.bilibili.com/video/BV1Vt411n7Bb?p=7

  4. 解决HtmlUnit执行JS报错提示ScriptException

    问题描述 HtmlUnit作为一款比Selenium更轻量的HeadLess的Java版本浏览器模拟器,不需要在服务器上安装部署浏览器及其Driver程序. 但是,众所周知,HtmlUnit对JS脚本 ...

  5. Linux中的umask

    在Linux中,当创建一个文件或者目录的时候,系统会自动为这个文件或者目录赋予默认的权限,而umask命令就是用来控制这个默认权限的. 查看umask umask的查看有两种方式,一种不带选项-S,一 ...

  6. Vue的Vue-ls使用

    Vue插件,用于从Vue上下文中使用本地Storage,会话Storage和内存Storage 1. 安装 NPM npm install vue-ls --save YARN yarn add vu ...

  7. TCP协议分析工具TcpEngine V1.2.0使用教程

    概述 目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析:另一类是原始网络数据包的监听分析,如Wireshark,这类工具擅长分析网络 ...

  8. JDK源码阅读-------自学笔记(十八)(java.lang.Enum枚举类)

    枚举类简介 如果有必要定义一组常量的时候使用 所有的枚举类型隐性地继承自 java.lang.Enum,枚举实质上还是类. 每一个枚举中的成员,就相当于枚举的一个对象,默认都是public stati ...

  9. 复现禅道V17.4的sql注入漏洞

    漏洞详情 简述:禅道是第一款国产的开源项目管理软件,它的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理.计划管理.发布管理.文档管理.事务管理等功 ...

  10. Istio(十):istio多集群部署模式

    目录 一.模块概览 二.多集群部署 2.1 多集群部署 2.2 网络部署模式 2.3 控制平面部署模型 2.4 网格部署模型 2.5 租户模式 2.6 最佳多集群部署 一.模块概览 在本模块中,我们将 ...