a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 應(yīng)用 > 軟件技巧 > 正文

MapReduce 入門之一步步自實(shí)現(xiàn)詞頻統(tǒng)計(jì)功能的教程

2024-07-16 17:44:36
字體:
供稿:網(wǎng)友

筆記中提供了大量的代碼示例,需要說明的是,大部分代碼示例都是本人所敲代碼并進(jìn)行測(cè)試,不足之處,請(qǐng)大家指正~

LZ 本來想先仔細(xì)寫一寫 Hadoop 偽分布式的部署安裝,然后介紹一些 HDFS 的內(nèi)容再來介紹 MapReduce,是在是沒有抽出空,今天就簡(jiǎn)單入門一下 MapReduce 吧。

一、MapReduce 概述

1.MapReduce 是一種分布式計(jì)算模型,由Google提出,主要用于搜索領(lǐng)域,解決海量數(shù)據(jù)的計(jì)算問題.

2.MapReduce 由兩個(gè)階段組成:Map和Reduce,用戶只需要實(shí)現(xiàn)map()和reduce()兩個(gè)函數(shù),即可實(shí)現(xiàn)分布式計(jì)算

二、具體實(shí)現(xiàn)

1.先來看一下 Eclipse 中此應(yīng)用的包結(jié)構(gòu)

2.創(chuàng)建 map 的任務(wù)處理類:WCMapper

 

/* * 1.Mapper 類的四個(gè)泛型中,前兩個(gè)指定 mapper 輸入數(shù)據(jù)的類型,后兩個(gè)指定 mapper 輸出數(shù)據(jù)的類型 *   KEYIN 是輸入的 key 的類型,VALUEIN 是輸入的 value 的類型 *   KEYOUT 是輸出的 key 的類型,VALUEOUT 是輸出的 value 的類型 * 2.map 和 reduce 的數(shù)據(jù)的輸入輸出都是以 key-value 對(duì)的形式封裝的 * 3.默認(rèn)情況下,框架傳遞給我們的 mapper 的輸入數(shù)據(jù)中,key 是要處理的文本中一行的起始偏移量,為 Long 類型, * 這一行的內(nèi)容為 value,為 String 類型的  * 4.后兩個(gè)泛型的賦值需要我們結(jié)合實(shí)際情況 * 5.為了在網(wǎng)絡(luò)中傳輸時(shí)序列化更高效,Hadoop 把 Java 中的 Long 封裝為 LongWritable, 把 String 封裝為 Text */public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable> {        //重寫 Mapper 中的 map 方法,MapReduce 框架每讀一行數(shù)據(jù)就調(diào)用一次此方法    @Override    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {        //書寫具體的業(yè)務(wù)邏輯,業(yè)務(wù)要處理的數(shù)據(jù)已經(jīng)被框架傳遞進(jìn)來,就是方法的參數(shù)中的 key 和 value        //key 是這一行數(shù)據(jù)的起始偏移量,value 是這一行的文本內(nèi)容                //1.將 Text 類型的一行的內(nèi)容轉(zhuǎn)為 String 類型        String line = value.toString();                //2.使用 StringUtils 以空格切分字符串,返回 String[]        String[] words = StringUtils.split(line, " ");                //3.循環(huán)遍歷 String[],調(diào)用 context 的 writer()方法,輸出為 key-value 對(duì)的形式        //key:?jiǎn)卧~   value:1        for(String word : words) {            context.write(new Text(word), new LongWritable(1));        }            }}

2.創(chuàng)建 reduce 的任務(wù)處理類:WCReducer:

 

/* * 1.Reducer 類的四個(gè)泛型中,前兩個(gè)輸入要與 Mapper 的輸出相對(duì)應(yīng)。輸出需要聯(lián)系具體情況自定義 */public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable> {        //框架在 map 處理完之后,將所有的 kv 對(duì)緩存起來,進(jìn)行分組,然后傳遞一個(gè)分組(<key,{values}>,例如:<"hello",{1,1,1,1}>),    //調(diào)用此方法    @Override    protected void reduce(Text key, Iterable<LongWritable> values, Context context)throws IOException, InterruptedException {                //1.定義一個(gè)計(jì)數(shù)器        long count = 0;                //2.遍歷 values的 list,進(jìn)行累加求和        for(LongWritable value : values) {            //使用 LongWritable 的 get() 方法,可以將 一個(gè) LongWritable 類型轉(zhuǎn)為 Long 類型            count += value.get();        }                //3.輸出這一個(gè)單詞的統(tǒng)計(jì)結(jié)果        context.write(key, new LongWritable(count));    }}            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 99这里只有精品 | 日韩亚洲视频 | 国产精品成人3p一区二区三区 | 后进极品白嫩翘臀在线视频 | 在线亚洲一区 | 日韩精品在线视频 | 亚洲美女视频在线观看 | av在线影院| 国产精品成人在线观看 | 夜夜精品视频 | 天天操狠狠操 | 久久久久久久av | 福利一区福利二区 | 狠狠色狠狠色合久久伊人 | 国产一区二区三区网站 | 免费观看黄a一级视频 | 在线观看免费视频亚洲 | 国产乱码精品一区二区 | 午夜视频在线观看网站 | 欧美一级裸体视频 | 在线电影一区 | 日韩精品久久一区二区三区 | 精品中文字幕一区二区 | 色婷婷综合久久久 | 在线a级毛片 | 国产一级网站 | 日一区二区 | 日韩视频免费在线观看 | 最近免费中文字幕在线视频2 | 日本中文字幕一区二区 | 日韩成人精品视频 | 一本视频在线 | 国产精品成av人在线视午夜片 | 91看片| 日韩 国产 欧美 | 一区二区三区在线免费观看 | 国产成人精品在线观看 | 久久久久18 | 成人水多啪啪片 | 精品国产欧美一区二区三区不卡 | 天天操狠狠操 |