MapReduce实例:编写MapReduce程序,统计每个买家收藏商品数量

现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,名为buyer_favorite1。

buyer_favorite1包含:买家id,商品id,收藏日期这三个字段,数据以“\t”分割,样本数据及格式如下:

  1. 买家id   商品id    收藏日期
  2. 10181   1000481   2010-04-04 16:54:31
  3. 20001   1001597   2010-04-07 15:07:52
  4. 20001   1001560   2010-04-07 15:08:27
  5. 20042   1001368   2010-04-08 08:20:30
  6. 20067   1002061   2010-04-08 16:45:33
  7. 20056   1003289   2010-04-12 10:50:55
  8. 20056   1003290   2010-04-12 11:57:35
  9. 20056   1003292   2010-04-12 12:05:29
  10. 20054   1002420   2010-04-14 15:24:12
  11. 20055   1001679   2010-04-14 19:46:04
  12. 20054   1010675   2010-04-14 15:23:53
  13. 20054   1002429   2010-04-14 17:52:45
  14. 20076   1002427   2010-04-14 19:35:39
  15. 20054   1003326   2010-04-20 12:54:44
  16. 20056   1002420   2010-04-15 11:24:49
  17. 20064   1002422   2010-04-15 11:35:54
  18. 20056   1003066   2010-04-15 11:43:01
  19. 20056   1003055   2010-04-15 11:43:06
  20. 20056   1010183   2010-04-15 11:45:24
  21. 20056   1002422   2010-04-15 11:45:49
  22. 20056   1003100   2010-04-15 11:45:54
  23. 20056   1003094   2010-04-15 11:45:57
  24. 20056   1003064   2010-04-15 11:46:04
  25. 20056   1010178   2010-04-15 16:15:20
  26. 20076   1003101   2010-04-15 16:37:27
  27. 20076   1003103   2010-04-15 16:37:05
  28. 20076   1003100   2010-04-15 16:37:18
  29. 20076   1003066   2010-04-15 16:37:31
  30. 20054   1003103   2010-04-15 16:40:14
  31. 20054   1003100   2010-04-15 16:40:16

要求编写MapReduce程序,统计每个买家收藏商品数量。

package mapreduce;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;
public class WordCount {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Job job = Job.getInstance();
        job.setJobName("WordCount");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(doMapper.class);
        job.setReducerClass(doReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        Path in = new Path("hdfs://localhost:9000/mymapreduce1/inyer_favourite9");
        Path out = new Path("hdfs://localhost:9000/mymapreduce1/out");
        FileInputFormat.addInputPath(job, in);
        FileOutputFormat.setOutputPath(job, out);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
    public static class doMapper extends Mapper<Object, Text, Text, IntWritable>{
        public static final IntWritable one = new IntWritable(1);
        public static Text word = new Text();
        @Override
        protected void map(Object key, Text value, Context context)
                    throws IOException, InterruptedException {
            StringTokenizer tokenizer = new StringTokenizer(value.toString(), "   ");
                word.set(tokenizer.nextToken());
                context.write(word, one);
        }
    }
    public static class doReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
        private IntWritable result = new IntWritable();
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context)
        throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable value : values) {
        sum += value.get();
        }
        result.set(sum);
        context.write(key, result);
        }
    }
}

原文地址:https://www.cnblogs.com/jmdd/p/11768679.html

时间: 2024-10-06 00:17:36

MapReduce实例:编写MapReduce程序,统计每个买家收藏商品数量的相关文章

【C语言】编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数。

#include <stdio.h> int main() { char s[20]; char num=0; int num_count=0; int space_count=0; int other_count=0; while((num=getchar())!='\n') {  if(num>='0'&&num<='9')           {              num_count++;           }           else if(n

编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数

#include <stdio.h> int main() {      char a=0;     int num_count=0;     int space_count=0;     int other_count=0;                                                  //注意此处,不能写成a=getchar(),然后while(a!='\n'),这样做只能输入一行,然后进行死循环      while((a=getchar())!='\

编写一个程序统计输入字符串中:各个数字,空白字符,以及其他所有字符常出现的次数。

实验6:Mapreduce实例——WordCount

实验目的 1.准确理解Mapreduce的设计原理 2.熟练掌握WordCount程序代码编写 3.学会自己编写WordCount程序进行词频统计 实验原理 MapReduce采用的是“分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个从节点共同完成,然后通过整合各个节点的中间结果,得到最终结果.简单来说,MapReduce就是”任务的分解与结果的汇总“. 1.MapReduce的工作原理 在分布式计算中,MapReduce框架负责处理了并行编程里分布式存储.工作调度,负载均

hive--构建于hadoop之上、让你像写SQL一样编写MapReduce程序

hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查询功能.本质就是将HQL(hive sql)转化为MapReduce程序 我们使用MapReduce开发会很麻烦,但是程序员很熟悉sql,于是hive就出现了,可以让我们像写sql一样来编写MapReduce程序,会自动将我们写的sql进行转化.但底层使用的肯定还是MapReduce. hive处理

[译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序

1. [译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序 http://www.rigongyizu.com/hadoop-mapreduce-next-generation-writing-yarn-applications/

MapReduce实例浅析

在文章<MapReduce原理与设计思想>中,详细剖析了MapReduce的原理,这篇文章则通过实例重点剖析MapReduce 本文地址:http://www.cnblogs.com/archimedes/p/mapreduce-example-analysis.html,转载请注明源地址. 1.MapReduce概述 Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集.

hadoop MapReduce实例解析

1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果.简单地说,MapReduce就是"任务的分解与结果的汇总". 在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker:另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracke

Hadoop编程实例之MapReduce

MapReduce原理图: MapReduce具体执行过程图: 首先是客户端要编写好mapreduce程序,配置好mapreduce的作业也就是job,接下来就是提交job了,提交job是提交到JobTracker上的,这个时候JobTracker就会构建这个job,具体就是分配一个新的job任务的ID值,接下来它会做检查操作,这个检查就是确定输出目录是否存在,如果存在那么job就不能正常运行下去,JobTracker会抛出错误给客户端,接下来还要检查输入目录是否存在,如果不存在同样抛出错误,如