国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        初識MapReduce的應用場景(附JAVA和Python代碼)

        Java版本代碼

        先是準備一個數據集,包含著已經切割好的詞匯,這里我們設置文件的格式是txt格式的。文件名是WordMRDemo.txt,內容是下面簡短的一句話,以空格分割開:

        hello my name is spacedong  welcome to the spacedong  thank you

        引入Hadoop的依賴包

        //這里使用的是2.6.5的依賴包,你可以使用其他版本的
              <dependency>
                   <groupId>org.apache.hadoop</groupId>
                   <artifactId>hadoop-common</artifactId>
                   <version>2.6.5</version>
               </dependency>
               <dependency>
                   <groupId>org.apache.hadoop</groupId>
                   <artifactId>hadoop-client</artifactId>
                   <version>2.6.5</version>
               </dependency>

        (溫馨提示:代碼部分可左右滑動)

        新建WordMapper.java文件,代碼的作用是進行以空格的形式進行分詞。

        public class WordMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
           @Override
           protected void map(LongWritable key, Text value, Mapper.Context context)
                   throws java.io.IOException, InterruptedException {
               String line = value.toString();
               //StringTokenizer默認按照空格來切
               StringTokenizer st = new StringTokenizer(line);
               while (st.hasMoreTokens()) {
                   String world = st.nextToken();
                   //map輸出
                   context.write(new Text(world), new IntWritable(1));
               }
           }

        新建WordReduce.java文件,作用是進行詞匯的統計。

        public class WordReduce extends Reducer<Text, IntWritable, Text, IntWritable> {
           @Override
           protected void reduce(Text key, Iterable<IntWritable> iterator, Context context)
                   throws java.io.IOException ,InterruptedException {
               int sum = 0 ;
               for(IntWritable i:iterator){
                   sum+=i.get();
               }
               context.write(key, new IntWritable(sum));
           }
         }

        新建WordMRDemo.java文件,作用是運行Job,開始分析句子。

        public class WordMRDemo {
           public static void main(String[] args) {
               Configuration conf = new Configuration();
               //設置mapper的配置,既就是hadoop/conf/mapred-site.xml的配置信息
               conf.set("mapred.job.tracker", "hadoop:9000");
               try {
                   //新建一個Job工作
                   Job job = new Job(conf);
                   //設置運行類
                   job.setJarByClass(WordMRDemo.class);
                   //設置要執行的mapper類
                   job.setMapperClass(WordMapper.class);
                   //設置要執行的reduce類
                   job.setReducerClass(WordReduce.class);
                   //設置輸出key的類型
                   job.setMapOutputKeyClass(Text.class);
                   //設置輸出value的類型
                   job.setMapOutputValueClass(IntWritable.class);
                   //設置ruduce任務的個數,默認個數為一個(一般reduce的個數越多效率越高)
                   //job.setNumReduceTasks(2);
                   //mapreduce 輸入數據的文件/目錄,注意,這里可以輸入的是目錄。
                   FileInputFormat.addInputPath(job, new Path("F:BigDataWorkPlacedatainput"));
                   //mapreduce 執行后輸出的數據目錄,不能預先存在,否則會報錯。
                   FileOutputFormat.setOutputPath(job, new Path("F:BigDataWorkPlacedataout"));
                   //執行完畢退出
                   System.exit(job.waitForCompletion(true) ? 0 : 1);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }

        最后執行WordMRDemo.java文件,然后得到的結果是out文件夾內的內容,它長這個樣子:

        out的文件目錄

        打開part-r-00000文件的內容如下

        具體的文件內容Python代碼版本

        新建map.py文件,進行詞匯的切割。

        for line in sys.stdin:
           time.sleep(1000)
           ss = line.strip().split(' ')
           for word in ss:
               print ' '.join([word.strip(), '1'])

        新建red.py文件,進行詞匯的統計。

        cur_word = None
        sum = 0
        for line in sys.stdin:
           ss = line.strip().split(' ')
           if len(ss) 。 2:
               continue
           word, cnt = ss
           if cur_word == None:
               cur_word = word
           if cur_word 。 word:
               print ' '.join([cur_word, str(sum)])
               cur_word = word
               sum = 0
           sum += int(cnt)
        print ' '.join([cur_word, str(sum)])

        新建run.sh文件,直接運行即可。

        HADOOP_CMD="/usr/local/src/hadoop-2.6.5/bin/hadoop"
        STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.5/share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar"
        INPUT_FILE_PATH_1="/test.txt"
        OUTPUT_PATH="/output"
        $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
        # Step 1.
        $HADOOP_CMD jar $STREAM_JAR_PATH
           -input $INPUT_FILE_PATH_1
           -output $OUTPUT_PATH
           -mapper "python map.py"
           -reducer "python red.py"
           -file ./map.py
           -file ./red.py

        以上的是演示demo的核心代碼,完整的代碼可以上github的代碼倉庫上獲取。

        GitHub地址為:http://github.com/cassieeric/bigDaaNotes

        以上的文章是MapReduce系列的第一篇,下篇預告是MapReduce的編程模型,敬請期待!

        福利

        看完后,是否對 MapReduce 有了初步的了解呢?最后送一本電子書給大家《Hadoop的技術內幕:深入解析MapReduce架構設計及實現原理》,在公眾號后臺回復 MapReduce 關鍵字即可獲取。

        參考資料:

        Hadoop的技術內幕:深入解析MapReduce架構設計及實現原理

        題圖:cosmin Paduraru

        <上一頁  1  2  
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 伊人精品在线| 津南区| 日韩男人天堂| 国产精品久久久| 97人妻精品一区二区三区免费| 亚洲熟妇色自偷自拍另类| 国产熟女一区二区三区五月婷| 狠狠干影院| 成人自拍网| 欧美精| 亚洲中文视频| 亚洲最大免费色情网| 诸城市| 熟女人妻AV| 方城县| 超碰人人艹| 忻州市| 德安县| 亚洲视频中文字幕| 五月天堂| 普陀区| 缙云县| 69精品视频| 国产一区二区波多野结衣| 最新色站| 亚洲精品国产第一页第二页_久久精品国产亚洲a片无码_国产精品乱码一区二区三 | 欧美在线a| 国产中年熟女高潮大集合| 九九碰九九爱97超碰| 91免费高清| 国产精品18| 成人国产网站| 欧美BBXX| 睡熟迷奷系列新婚之夜| 黑人AV无码| 桐城市| 国产xxxxx| 亚洲中文视频| 拍国产真实乱人偷精品| 色www88| 美腿丝袜中文字幕精品|