国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 應用 > 軟件技巧 > 正文

MapReduce 入門之一步步自實現詞頻統計功能的教程

2024-07-16 17:44:36
字體:
來源:轉載
供稿:網友

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

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

一、MapReduce 概述

1.MapReduce 是一種分布式計算模型,由Google提出,主要用于搜索領域,解決海量數據的計算問題.

2.MapReduce 由兩個階段組成:Map和Reduce,用戶只需要實現map()和reduce()兩個函數,即可實現分布式計算

二、具體實現

1.先來看一下 Eclipse 中此應用的包結構

2.創建 map 的任務處理類:WCMapper

 

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

2.創建 reduce 的任務處理類:WCReducer:

 

/* * 1.Reducer 類的四個泛型中,前兩個輸入要與 Mapper 的輸出相對應。輸出需要聯系具體情況自定義 */public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable> {        //框架在 map 處理完之后,將所有的 kv 對緩存起來,進行分組,然后傳遞一個分組(<key,{values}>,例如:<"hello",{1,1,1,1}>),    //調用此方法    @Override    protected void reduce(Text key, Iterable<LongWritable> values, Context context)throws IOException, InterruptedException {                //1.定義一個計數器        long count = 0;                //2.遍歷 values的 list,進行累加求和        for(LongWritable value : values) {            //使用 LongWritable 的 get() 方法,可以將 一個 LongWritable 類型轉為 Long 類型            count += value.get();        }                //3.輸出這一個單詞的統計結果        context.write(key, new LongWritable(count));    }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安泽县| 虹口区| 平远县| 枝江市| 岫岩| 游戏| 灵台县| 崇阳县| 沙雅县| 大方县| 松江区| 舟山市| 黄石市| 时尚| 曲周县| 太康县| 安达市| 东乌珠穆沁旗| 皋兰县| 旅游| 舞阳县| 三门县| 防城港市| 齐齐哈尔市| 宜良县| 景泰县| 九江市| 道真| 施甸县| 关岭| 台南县| 灌南县| 锦州市| 乌苏市| 肇庆市| 绥滨县| 加查县| 永济市| 弋阳县| 马龙县| 普格县|