java用數組實現單詞計數,MapReduce實現單詞計數原理及Java編程:WordCount

MapReduce實現單詞計數:WordCount

單詞計數的文本信息(hello.txt):

hello can i help you

i have a dream

maybe you can help me

? 實現過程:

? Map過程:并行讀取文本,對讀取的單詞進行Map操作,每個詞將會形成。

? 第一行將會形成:

? 第二行生成

? 第三行生成

? Map會根據key值,自動按照ASCII值進行排序,所以,相同key值得K/V值,將會被放到一起

? Reduce過程:對map的結果進行合并,計算,

? Map將key相同得值放到了一起,所以當Reduce拿到從Map傳過來得數據,可以理解為如下

? 而Reduce進行最后得合并,就會得到如下得結果

? 最后輸出

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g8x0hrTQ-1578386385884)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200107162331181.png)]

Java Api 編寫

public class WordCountApp {

//靜態類,用于繼承Mapper類,用于繼承Mapper方法

public static class MyMapper extends Mapper{//mapper的四種參數類型(源碼使用了泛型,具體可以查看源碼)

//IntWritable與Text是Hadoop中的兩個參數,可以簡單的理解為是

//在hadoop中的int與text格式

private final static IntWritable one =new IntWritable(1);

private Text word =new Text();

//map操作

public void map(Object key ,Text value ,Context context)throws IOException,InterruptedException{

//StringTokenizer是Java.util中的類,用于將字符串切割成

//一個字符串數組(用" "把各個字符分隔開)。

StringTokenizer itr =new StringTokenizer(value.toString());

//遍歷文本中一行的所有字符串

while (itr.hasMoreTokens()){

word.set(itr.nextToken());

//寫入到map的輸出文件中,這個context用于Reduce的接收

context.write(word,one);

}

}

}

//靜態類,用于繼承Reduce類,編寫Reduce方法

public static class MyReduce extends Reducer{

//統計計數,即記錄單詞的出現次數,最后輸出的輔助類

private final static IntWritable result =new IntWritable();

//reduce操作

public void reduce(Text key , Iterablevalues, Context context)throws IOException,InterruptedException{

//記錄單詞的出現個數,因為在Reduce中沒有int類型,所以要

//用IntWritable進行包裝

int sum=0;

//上面講到,Reduce拿到Map的值的形式,這個Reduce會執行在每

//一個塊中,用于計數,所以每一個單詞都是從0開始計數

for (IntWritable val : values){

sum +=val.get();

}

//int sum包裝進 IntWritable

result.set(sum);

//寫入到最終會輸出的地方

context.write(key,result);

}

}

//主方法

public static void main(String[] args) throws IOException, URISyntaxException, ClassNotFoundException, InterruptedException {

//本此編碼是在Windowx編程,所以要加Hdfs的路徑

String INPUT_PATH="hdfs://10.30.60.3:8020/a";

String OUTPUT_PATH="hdfs://10.30.60.3:8020/b";

Configuration configuration =new Configuration();

final FileSystem fileSystem=FileSystem.get(new URI(INPUT_PATH),configuration);

//確保INPUT的路徑存在,而OutPut得路徑會在最后生成結果時生成、

//所以確保OUTPUT得文件不存在

if(fileSystem.exists(new Path(OUTPUT_PATH))){

fileSystem.delete(new Path(OUTPUT_PATH),true);

}

//設置job

Job job =Job.getInstance(configuration,"WordCountApp");

//設置主類

job.setJarByClass(WordCountApp.class);

//設置mapper

job.setMapperClass(MyMapper.class);

//設置Mapper的輸出格式

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(IntWritable.class);

//設置Reduce

job.setReducerClass(MyReduce.class);

//設置Reduce格式

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

//設置輸入格式

job.setInputFormatClass(TextInputFormat.class);

Path inputPath=new Path(INPUT_PATH);

FileInputFormat.addInputPath(job,inputPath);

//設置輸出格式

job.setOutputValueClass(TextOutputFormat.class);

Path outputPath=new Path(OUTPUT_PATH);

FileOutputFormat.setOutputPath(job,outputPath);

//提交

System.exit(job.waitForCompletion(true)? 0:1);

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python理論知識選擇題_Python基礎自測題答案和基礎知識梳理

Python基礎自測題答案和基礎知識梳理 1.關于Python中的lambda表達式的函數體自能是單獨一條語句,所以答案選擇C。 例如:>>>g lambda x: 2*x1 g(3) 7 2.Python中的變量不需要事先聲明,但是需要創建和賦值,否則你怎么用&a…

STM32f4 ARM Bootloader

參考資料: 基于ARM 的嵌入式系統Bootloader 啟動流程分析 Bootloader 詳解 ( 代碼環境 | ARM 啟動流程 | uboot 工作流程 | 架構設計) Android系統啟動流程 -- bootloader 在main()之前,IAR都做了啥? STM32 IAP程序 源碼 和測試代碼 有詳細的…

查找算法之順序查找

參考: 1. 順序查找 | 博客園 基本思想: 順序查找,就是從第一個元素開始,按索引順序遍歷待查找序列,直到找出給定目標或者查找失敗。 特點: 1. 對待查序列(表)無要求 -- 待查找序列可…

matlab kfda,SVD與KFDA相結合人臉識別-matlab-畢業論文

XXXXxx畢業設計(論文)最高達到88%。當在抽取的特征維數為39,PCA空間的投影維數為110的情況下,隨著訓練樣本個數的增加,LDA的識別情況如表4所示表4 ORL人臉庫LDA測試結果(2)訓練樣本數 識別率/% 識別時間/S3 68.2 52.3594 87.92 31.5315 88.00…

python數據預測_python時間序列預測股票走勢

提示:這只是個訓練模型,技術不具備實際意義,入市需謹慎。 首先調用tushare包 import tushare as ts import pandas as pd import matplotlib.pyplot as plt 查自己比較感興趣的股票,這里我查找的是新能源/燃料電池/氫燃料&#xf…

30.Android之百度地圖簡單學習

今天用了下百度地圖,簡單寫了一個例子,記錄下。 一、申請AK(API Key) 要想使用百度地圖sdk,就必須申請一個百度地圖的api key。申請流程挺簡單的。 首先注冊成為百度的開發者,然后打開http://lbsyun.baidu.…

在datatable中,在指定位置插入列

假如dataset ds 里面已經存在了數據,當我們想在datatable中插入一列數據,可以用以下方法實現:ds.Tables[0].Columns.Add("star");ds.Tables[0].Columns["star"].SetOrdinal(0);這樣“star”列就添加到datatable的第一列了…

python爬取b站彈幕_爬取B站彈幕并且制作詞云

目錄 SRE實戰 互聯網時代守護先鋒,助力企業售后服務體系運籌帷幄!一鍵直達領取阿里云限量特價優惠。 爬取彈幕 1. 從手機端口進入網頁爬取找到接口 2.代碼 import requests from lxml import etree import numpy as np urlhttps://api.bilibili.com/x/v1…

myeclipse始終build workspace

之前我的myeclipse運行某個項目的時候&#xff0c;總是不停的buildworkspace&#xff0c;而且稍微改動一個(不管是java類還是jsp)都會加載接近1分鐘甚至更久&#xff0c;從網上搜了好久&#xff0c;先總結下搜的多數方法 1、叫你去掉.project文件的一段話 <buildCommand>…

python控制燈_Python 控制樹莓派 GPIO 輸出:控制 LED 燈

樹莓派 GPIO 控制輸出的入門應該都是從控制 LED 燈開始的吧。 樹莓派版本&#xff1a;Model 3B 樹莓派系統&#xff1a;Raspbian Stretch with desktop and recommended software&#xff0c;April 2019 連接裝置 準備一個 LED 燈&#xff0c;兩個兩頭都為母的杜邦線。對照下圖…

圖論:弦圖最小點染色

弦圖的定義&#xff1a;當圖中任意長度大于3的環都至少有一個弦時&#xff0c; 一個無向圖稱為弦圖 不存在四角、五角等關系就說明這個圖是一個弦圖 題目問的是&#xff0c;任何一對相互認識的人不可以組一隊&#xff0c;問最多可以組多少對 所有的人構成的關系圖是一個弦圖&am…

報錯型sql注入原理分析

0x00&#xff1a;前言關于sql注入&#xff0c;經久不衰&#xff0c;現在的網站一般對sql注入的防護也相對加強了&#xff0c;2016年的***測試報告中&#xff0c;出現最多的是xss&#xff08;跨站腳本***&#xff09;和明文傳輸等&#xff0c;但是對sql注入的利用方式&#xff0…

matlab矩陣 0,matlab zeros初始化為0矩陣

zeros為創建一個值為零的數組&#xff1b;如matrix1zeros(4,5);%4*5的矩陣&#xff0c;矩陣中每個元素都為0matrix2zeros(4,5,3);%4*5*3的數組&#xff0c;數組中每個元素都為0下面舉一個將圖像存到數組的例子對RGB圖片1.jpg&#xff0c;2.jpg&#xff1b;大小為700*500*3創建4…

HDU 2199

人生中第一道搜索題 精度精度、&#xff01;&#xff01;&#xff01; 1 #include<iostream>2 #include<algorithm>3 #include<cmath>4 #include<cstdio>5 using namespace std;6 double f(double x)7 {8 return 8*pow(x,4.0)7*pow(x,3.0)2*pow(x,…

python文件編譯_編譯Python文件

編譯Python文件 一、編譯Python文件 為了提高加載模塊的速度&#xff0c;強調強調強調&#xff1a;提高的是加載速度而絕非運行速度。python解釋器會在__pycache__目錄中下緩存每個模塊編譯后的版本&#xff0c;格式為&#xff1a;module.version.pyc。通常會包含python的版本號…

SDN-博客收集

1、云網融合的多云網絡轉載于:https://www.cnblogs.com/snowwhite/p/9624404.html

php cookie 字串,php入門(字符串,cookie,session)

php入門(字符串,cookie,session)&#xff0c;有需要的朋友可以參考下。字符串獲取字符串的長度: strlen()函數獲取中文字長echo mb_strlen($str,”UTF8”);英文字符串截取$stri love you;復制代碼//截取love這幾個字母echo substr($str, 2, 4);//為什么開始位置是2呢&#xff0…

批處理命令Start

2019獨角獸企業重金招聘Python工程師標準>>> 運行hello.exe&#xff08;最小化&#xff09; start /MIN hello.exe 用記事本打開readme.txt&#xff08;最大化&#xff09; start /MAX notepad readme.txt 打開網頁 start http://www.baidu.com/ 調用另外一個腳本&…

vim亂碼的解決

解決vim文件亂碼&#xff0c;打開文件亂碼&#xff0c;菜單&#xff0c;提示信息亂碼&#xff1a; 有四個跟字符編碼方式有關的選項&#xff0c;encoding、fileencoding、fileencodings、termencoding 在linux中修改.vimrc&#xff08;在win中是_vimrc&#xff09;A&#xff0c…