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表单提交四种方式 ...
随机推荐
- linux下nginx安装和配置
一.软件安装 1.环境说明 操作系统:CentOS 7.4 64位 nginx版本:1.16.1 安装日期:2019/10/01 安装用户:root 2.安装运行库 yum -y install gc ...
- 网络流量分析 | AnaTraf 网络故障排除万用表教程更新: 如何抓取两个 MAC / IP 地址之间的流量?
AnaTraf 致力于提供国产化网络流量分析.网络可视化.网络故障排除解决方案. AnaTraf 网络万用表是一款实时的网络测量.流量分析工具,用于网络流量监控.识别网络性能瓶颈.快速排查网络问题. ...
- 利用pearcmd实现裸文件包含
利用pearcmd实现裸文件包含 在 ctf 中,常常有这样一类题: 题目很简单,一般围绕一个 include 函数展开. 例: ctfshow 元旦水友赛 easy_include 这类题目没有提供 ...
- C语言:++ --优先级的深入理解
#include <stdio.h> int main() { int num = 11; int result = ++num > 11 && --num < ...
- QGIS开发笔记(二):Windows安装版二次开发环境搭建(上):安装OSGeo4W运行依赖其Qt的基础环境Demo
前言 使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车.无人船.无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇: 上半部分:主要是安装好后,使用QtC ...
- Windows下生成RSA公钥和私钥
打开E:\MAMP\bin\apache(服务器安装文件目录)文件夹下的 bin 文件夹,执行 openssl.exe 文件 生成 RSA 私钥,出现图中提示说明生成成功 genrsa -out rs ...
- 29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!
大家好,我是狂师! 今天给大家推荐一款开源的Python库:Gradio! Gradio是一个开源的Python库,用于创建机器学习和数据科学的交互式应用和演示. 项目地址: https://gith ...
- 慢查询SQL优化
记一次慢查询的SQL优化 测试表结构 MariaDB [shoppings]> desc login_userinfo; +------------+-------------+------+- ...
- 【终极指南】使用Python可视化分析文本情感倾向
本文分享自华为云社区<Python理解文本情感倾向的终极指南>,作者: 柠檬味拥抱. 情感分析是一种通过自然语言处理技术来识别.提取和量化文本中的情感倾向的方法.Python在这一领域有着 ...
- 在kubernetes里使用seccomp限制容器的系统调用
目录 一.系统环境 二.前言 三.系统调用简介 四.使用seccomp限制docker容器系统调用 五.在kubernetes里使用seccomp限制容器的系统调用 5.1 配置seccomp允许po ...