Scala实现Mapreduce程序4-----数据去重

数据去重,key只输出一次

scala实现:先groupByKey(),然后SortByKey(),然后输出keys

object Reduplicate {  def main(args: Array[String]): Unit = {    val conf=new SparkConf().setMaster("local").setAppName("remove duplication");    val sc=new SparkContext(conf);    val line=sc.textFile("");    line.filter(_.trim.length>0).map(line=>(line.trim,"")).groupByKey().sortByKey().keys.collect()

}

}

MapReduce实现:以整个数据作为key,reduce过程中输出key就可以了
package HadoopvsSpark;

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;import java.io.IOException;

//对数据进行去重,以整个数据作为key,reduce过程中输出key就可以了

/** * Created by Administrator on 2017/5/25. */public class Duplicate {    public static class Map extends Mapper<Object,Text,Text,Text>{

private static Text text=new Text(  );        public void map(Object key,Text value,Context context) throws IOException, InterruptedException {            text=value;            context.write( new Text(text),new Text(" ") );        }    }

public static class Reduce extends Reducer<Text,Text,Text,Text>{        public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException {            context.write( key,new Text( "" ) );        }    }

public static void  main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {        Job job=new Job();        Configuration conf=new Configuration();        conf.set("mapred.job.tracker","192.169.1.101:8200");

String[] input=new String[]{"a","s"};        String[] otherArgs=new GenericOptionsParser(conf,input).getRemainingArgs();        if(otherArgs.length!=2){            System.err.println("Usage: Data Deduplication <in> <out>");            System.exit(2);        }

job.setJarByClass(Duplicate.class);        FileInputFormat.addInputPath( job,new Path( otherArgs[0] ) );        FileOutputFormat.setOutputPath( job,new Path(otherArgs[1]) );

job.setOutputKeyClass( Text.class);        job.setOutputValueClass( Text.class );        job.setMapperClass( Map.class );        job.setCombinerClass( Reduce.class );        job.setReducerClass( Reduce.class);        System.out.println(job.waitForCompletion( true )? 1:0 );     }

}
时间: 2024-10-24 21:41:28

Scala实现Mapreduce程序4-----数据去重的相关文章

编写mapreduce程序实例——数据去重

每一行为一个日期及一个人名字,分为3个文件,其中存在多行重复数据,需要进行去重. 输入文件: file1: 2006-6-9 a 2006-6-11 b 2006-6-21 c 2006-6-10 a 2006-6-11 b 2006-6-30 e 2006-6-9 a 2006-6-26 d file2: 2006-6-9 a 2006-6-11 b 2006-6-9 a 2006-6-21 c 2006-6-11 b 2006-6-9 a 2006-6-30 e file3: 2006-6-

MapReduce编程之数据去重

数据去重主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就进入这个实例的MapReduce程序设计. package com.hadoop.mr; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.

Scala实现Mapreduce程序2-----Top5

输入n个数,返回TOP5的数字 scala实现,以各个数字为key,""为空,按照key进行排序,取出前5个 object Top5 { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("") val sc = new SparkContext(conf) val one = sc.textFile("/spark/test") var in

Scala实现Mapreduce程序3----数据排序

输入n个数字,输出每一个数字以及其排名例如: 4 2 3 1 输出: 1 1 2 2 3 3 4 4 scala实现 package HadoopvsSpark.ScalaMap import org.apache.spark.{HashPartitioner, SparkConf, SparkContext} /** * Created by Administrator on 2017/5/25. */object Sorted { def main(args: Array[String]):

Hadoop之MapReduce程序应用三

摘要:MapReduce程序进行数据去重. 关键词:MapReduce   数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 2014-1-1    wangluqing 2014-1-2    root 2014-1-3   root 2014-1-4  wangluqing 2014-1-5  root 2014-1-6  wangluqing log-file2.txt内容 2014-1-1  root 2014-

Hadoop mapreduce 数据去重 数据排序小例子

数据去重: 数据去重,只是让出现的数据仅一次,所以在reduce阶段key作为输入,而对于values-in没有要求,即输入的key直接作为输出的key,并将value置空.具体步骤类似于wordcount: Tip:输入输出路径配置. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop

利用MapReduce实现数据去重

数据去重主要是为了利用并行化的思想对数据进行有意义的筛选. 统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重. 示例文件内容: 此处应有示例文件 设计思路 数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次. 自然就想到将同一数据的所有记录都交给一台reduce机器,无路这个数据出现多少次,只要在最终结果中输出一次就可以了. 具体就是reduce的输入应该以数据作为key,而对value-list没有要求. 当reduce收到一个

Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一年……我在博客园-_-#,希望用dt的代码燃烧脑细胞,温暖小心窝. 上篇<Hadoop阅读笔记(一)——强大的MapReduce>主要介绍了MapReduce的在大数据集上处理的优势以及运行机制,通过专利数据编写Demo加深了对于MapReduce中输入输出数据结构的细节理解.有了理论上的指导,仍

6.命令行编译打包运行五个MapReduce程序

对于如何编译WordCount.java,对于0.20 等旧版本版本的做法很常见,具体如下: javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java 但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此编辑和打包自己的MapReduce程序与旧版本有所不同. Hadoop 2.x 版本中的依赖 jar Hadoop 2.x 版本中jar不再集中在一个