1. 程式人生 > >MapReduce程式設計例項(三)

MapReduce程式設計例項(三)

前提準備:

MapReduce程式設計例項:


輸入:

2013-11-01 aa
2013-11-02 bb
2013-11-03 cc
2013-11-04 aa
2013-11-05 dd
2013-11-06 dd
2013-11-07 aa
2013-11-09 cc
2013-11-10 ee

2013-11-01 bb 
2013-11-02 33 
2013-11-03 cc
2013-11-04 bb
2013-11-05 23 
2013-11-06 dd
2013-11-07 99 
2013-11-09 99
2013-11-10 ee

.....

.....

.....

資料重複,map中每一行做為一個key,value值任意,經過shuffle之後輸入到reduce中利用key的唯一性直接輸出key

程式碼太簡單,不解釋,上程式碼:

package com.t.hadoop;

import java.io.IOException;
import java.util.HashSet;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.util.GenericOptionsParser;

/**
 * 資料去重
 * @author daT 
[email protected]
* */ public class Dedup { public static class MyMapper extends Mapper<Object, Text, Text, Text>{ @Override protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { context.write(value, new Text("")); } } public static class MyReducer extends Reducer<Text, Text, Text, Text>{ @Override protected void reduce(Text key, Iterable<Text> value, Context context) throws IOException, InterruptedException { context.write(key, new Text("")); } } public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{ Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if(otherArgs.length<2){ System.out.println("parameter errors!"); System.exit(2); } Job job = new org.apache.hadoop.mapreduce.Job(conf, "Dedup"); job.setJarByClass(Dedup.class); job.setMapperClass(MyMapper.class); job.setCombinerClass(MyReducer.class); job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true)?0:1); } }
輸出結果
2013-11-01 aa
2013-11-01 bb
2013-11-02 33
2013-11-02 bb
2013-11-03 cc
2013-11-03 cc
2013-11-04 98
2013-11-04 aa
2013-11-04 bb
2013-11-05 23
2013-11-05 93
2013-11-05 dd
2013-11-06 99
2013-11-06 dd
2013-11-07 92
2013-11-07 99
2013-11-07 aa
2013-11-09 99
2013-11-09 aa
2013-11-09 cc
2013-11-10 ee

相關推薦

MapReduce程式設計例項

前提準備: MapReduce程式設計例項: 輸入: 2013-11-01 aa 2013-11-02 bb 2013-11-03 cc 2013-11-04 aa 2013-11-05 dd 2013-11-06 dd 2013-11-07

MapReduce程式設計例項

package com.t.hadoop; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import

MapReduce程式設計例項

前提準備: MapReduce程式設計例項: 開發示例:WordCount 本文例詳細的介紹如何在整合環境中執行第一個MapReduce程式 WordCount,以及WordCount程式碼分析 新建MapReduce專案:   Finish生成

hadoop之mapreduce程式設計例項系統日誌初步清洗過濾處理

剛剛開始接觸hadoop的時候,總覺得必須要先安裝hadoop叢集才能開始學習MR程式設計,其實並不用這樣,當然如果你有條件有機器那最好是自己安裝配置一個hadoop叢集,這樣你會更容易理解其工作原理。我們今天就是要給大家演示如何不用安裝hadoop直接除錯程式設計MapR

大數據入門第八天——MapReduce詳解

大數 blog eve 分享圖片 shuf open src hid span 1/mr的combiner 2/mr的排序 3/mr的shuffle 4/mr與yarn 5/mr運行模式 6/mr實現join 7/mr全局圖

Linux串列埠程式設計教程——串列埠程式設計原始碼解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列埠程式設計(二----圖文並茂,講解深刻http://blog.csdn.net/w28252

Linux串列埠程式設計教程(三)——串列埠程式設計詳(原始碼)解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列埠程式設計(二)----(圖文並茂,講解深刻)http://blog.csdn.ne

Python爬蟲框架Scrapy例項資料儲存到MongoDB

Python爬蟲框架Scrapy例項(三)資料儲存到MongoDB任務目標:爬取豆瓣電影top250,將資料儲存到MongoDB中。 items.py檔案複製程式碼# -*- coding: utf-8 -*-import scrapy class DoubanItem(scrapy.Item): # d

Linux命令列與shell指令碼程式設計大全

十二、呈現資料 輸入和輸出     標準檔案描述符                  0 STDIN 標準輸入   &n

JavaScript面向物件程式設計-繼承

寄生組合式繼承(終極繼承者) 前面學習了類式繼承和建構函式繼承組合使用,也就是組合繼承,但是這種繼承方式有個問題,就是子類不是父類的例項,而子類的原型是父類的例項。子類不是父類例項的問題是由類式繼承引起的。因此還有一種更好的繼承方式,那就是寄生組合式繼承,也就是寄生

Python學習初級程式設計例項

題目:有1、2、3、4四個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 程式分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。 程式原始碼

Java程式設計思想第15章-泛型

目錄: 泛型(generics)的概念是Java SE5的重大變化之一。泛型實現了引數化型別(parameterized types)的概念,使程式碼可以應用於多種型別。“泛型”這個術語的意思是:“適用於許多許多的型別”。 1 泛型方法   泛型方法與其所在的類

Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項UI互動邏輯開發

為了方便開發,我們把GameController做成一個單例。 using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using UnityEngine.UI; pu

java程式設計--圖表楊輝三角問題

package com.neuedu.one; //楊輝三角問題 import java.util.Scanner; public class Ch3 { /* 根據輸入行數打印出楊輝三角形,如下: 1 1     1 1     2     1 1     3     

從零開始學習Kinect程式設計筆記 4.23

睡到中午11點半才起來 orz 中午又吃太多了,什麼時候才能到155啊!! 昨天寫到環境配置 配置完之後可以開始程式設計了 下面這些是轉載別人的文章程式碼 #include <windows.h> #include <iostream>

python 爬蟲例項

問題描述 爬取部落格園的首頁資料URL【https://home.cnblogs.com/blog/page/1/】,之後寫到自己的Excel裡面   環境: OS:Window10 python:3.7   程式碼 import requests import os

程式設計訓練

關於深度優先演算法(dfs)和廣度優先演算法(bfs)的一點東西。 文章目錄 深度優先遍歷 深度優先,本質應該是圖的遍歷,從某個頂點出發,訪問圖中的每一個頂點,而深度優先就意味著它是優先選擇更深層次的頂點,用樹來看得的話,那就是最快到達某個葉子結點。 一般步驟:

java經典程式程式設計知識

Java中int、String的型別轉換 int->String 加上"" Integer.toString() String->int Integer.parseInt(); String[] str=scanner.nextLine().split(" ");

Shell指令碼程式設計執行方式差異(source, sh script, ./script)

利用直接方式或bash執行 該 指令碼 都會使用一個新的 bash 環境來執行指令碼內的指令!也就是說,使用這種執行方式時, 其實 script 是在子程式的 bash 內執行的 知識點 當子程式完成後,在子程式內的各項變數或動作將會結束而不會傳回到父程式中

Python 入門程式設計答案

Python 入門程式設計題:21~30(答案) 提示:最好還是先思考,先編寫,再看答案哦 ^_^ 21. import os.path import shutil def create_filefolder(folder_name): if not os.path.exi

Python 入門程式設計

Python 入門程式設計題:21~30 本系列部落格都是一些比較簡單的題目,適合新手,因為我就是新手~非常歡迎大家一起討論,讓我們一起進步! 21、現在有一個資料夾Filetest,資料夾中有大量的圖片 圖片的名稱是這樣的12345-1.jpg、23456-1.jpg、1234