MapReduce编程之统计二手房数目

要求:统计出上海各个地区二手房的数目,其中将浦东的二手房单独由一个Reduce计算

分析:由于浦东区的二手房数目需要单独统计,因此需要设置分区器,同时设置ReduceTask为2
代码实现:

package com.miao.secondhouse;import com.miao.partition.UserPartition;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;import java.io.IOException;/*** @ClassName SecondHouseNum* @Description  TODO 统计上海各个地区二手房数目,将浦东的二手房单独由一个Reduce计算* @Date 2021-04-27 17:47:53* @Create By     Miao*/
public class SecondHouseNum extends Configured implements Tool {//构建、配置、提交Jobpublic int run(String[] args) throws Exception {/*** step1:构建Job*///实例化一个MapReduce的Job对象Job job = Job.getInstance(this.getConf(),"second house num");//指定允许jar包运行的类job.setJarByClass(SecondHouseNum.class);/*** step2:配置Job*///Input:配置输入//指定输入类的类型job.setInputFormatClass(TextInputFormat.class);//可以不指定,默认就是TextInputFormat//指定输入源,也就是二手房信息所在的文件的路径Path inputPath = new Path("D:\\Study\\idea\\MavenProject\\secondhouse.csv");//使用第一个参数作为程序的输入TextInputFormat.setInputPaths(job,inputPath);//Map:配置Mapjob.setMapperClass(SecondMapper.class); //设置调用的Mapper类job.setMapOutputKeyClass(Text.class); //设置K2的类型job.setMapOutputValueClass(IntWritable.class); //设置V2的类型//Shuffle:配置Shufflejob.setPartitionerClass(UserPartition.class); //设置分区器//Reduce:配置Reducejob.setReducerClass(SecondReducer.class); //设置调用reduce的类job.setOutputKeyClass(Text.class); //设置K3的类型job.setOutputValueClass(IntWritable.class); //设置V3的类型job.setNumReduceTasks(2); //设置ReduceTask的个数,默认为1//Output:配置输出//指定输出类的类型job.setOutputFormatClass(TextOutputFormat.class);//默认就是TextOutputFormat//设置输出的路径,输出计算得到的二手房数目信息存放的文件的路径Path outputPath = new Path("D:\\Study\\idea\\MavenProject\\output\\three");//判断输出是否存在,存在就删除FileSystem fs = FileSystem.get(this.getConf());if(fs.exists(outputPath)){fs.delete(outputPath,true);}TextOutputFormat.setOutputPath(job,outputPath);/*** step3:提交Job*/return job.waitForCompletion(true) ? 0 : -1;}//程序的入口方法public static void main(String[] args) throws Exception {//构建配置管理对象Configuration conf = new Configuration();//通过工具类的run方法调用当前类的实例的run方法int status = ToolRunner.run(conf, new SecondHouseNum(), args);//退出程序System.exit(status);}public static class SecondMapper extends Mapper<LongWritable,Text,Text,IntWritable>{//Key2Text outputKey = new Text();//Value2IntWritable outputValue = new IntWritable(1);//小区名称,户型,面积,地区,楼层朝向,总价,单价,建造年份@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//取出地区String region = value.toString().split(",")[3];//地区作为Key2this.outputKey.set(region);//输出context.write(this.outputKey,this.outputValue);}}public static class SecondReducer extends Reducer<Text,IntWritable,Text,IntWritable>{//Value3IntWritable outputValue = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable value : values) {sum += value.get();}this.outputValue.set(sum);context.write(key,this.outputValue);}}
}

自定义分区器

代码实现:

package com.miao.partition;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;/*** @ClassName UserPartition* @Description TODO 自定义分区器*   extends Partitioner<Text, IntWritable>*   必须指定Key2和Value2的类型,重写getPartition方法必须指定类型* @Date 2021-04-27 17:47:53* @Create By     Miao*/public class UserPartition extends Partitioner<Text, IntWritable> {@Overridepublic int getPartition(Text k2, IntWritable v2, int numPartition) {String region = k2.toString();if ("浦东".equals(region)) {return 0;} else {return 1;}}
}

Hadoop:MapReduce编程之统计二手房数目相关推荐

  1. Hadoop:MapReduce编程之统计每个订单价格最高的商品信息

    MapReduce编程之统计每个订单价格最高的商品信息 orders.txt文件内容如下: Order_0000001 Pdt_01 222.8 Order_0000001 Pdt_05 25.8 O ...

  2. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  3. Hadoop MapReduce编程 API入门系列之查找相同字母组成的字谜(三)

    找出相同单词的所有单词.现在,是拿取部分数据集(如下)来完成本项目. 项目需求 一本英文书籍包含成千上万个单词或者短语,现在我们需要在大量的单词中,找出相同字母组成的所有anagrams(字谜). 思 ...

  4. Hadoop MapReduce编程模型

    MapReduce编程模型 目录 MapReduce编程模型 1.MapReduce编程模型简介 2.什么是MapReduce 3.MapReduce的优缺点 4.MapReduce程序设计方法 5. ...

  5. Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)

    一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先根据数据集,分别统计出 ...

  6. MapReduce编程 -词频统计

    词频统计 首先,MapReduce通过默认的组件TextInputFormat将待处理的数据文件(text1.txt和text2.txt),把每一行的数据都转变为<key,value>键值 ...

  7. Hadoop MapReduce编程 API入门系列之最短路径(十五)

    不多说,直接上代码. ====================================== = Iteration: 1 = Input path: out/shortestpath/inpu ...

  8. Hadoop MapReduce编程 API入门系列之wordcount版本2(六)

    这篇博客,给大家,体会不一样的版本编程. 代码 1 package zhouls.bigdata.myMapReduce.wordcount4; 2 3 import java.io.IOExcept ...

  9. Hadoop MapReduce编程 API入门系列之join(二十六)

    天气记录数据库 气象站数据库 气象站和天气记录合并之后的示意图如下所示. 011990-99999 SIHCCAJAVRI 195005150700 0 011990-99999 SIHCCAJAVR ...

最新文章

  1. 还在埋头写论文?知网检索的这些小技巧让你有如神助!
  2. linux下的僵尸进程处理SIGCHLD信号【转】
  3. 什么是事务、半事务消息?怎么实现的?
  4. A Simple Problem with Integers POJ - 3468 (线段树)
  5. 请求地址操作中的(int*)
  6. 生命很短,我用tldr
  7. mac地址转换_mac电脑格式转化工具
  8. phpstorm xdebug配置
  9. IIS锁定是默认设置的 (overrideModeDefault=“Deny“)问题解决
  10. Vensim学习之Random Normal函数的使用
  11. aoa计算机二级考试答案操作题,浙江省计算机二级等级考试aoa理论题.pdf
  12. 数据结构实验报告:顺序表基本操作的实现
  13. 操作系统进程调度实验
  14. web前端经典面试题
  15. Linux安装docker及其他镜像
  16. 看诸葛亮是如何识别对付小人的~
  17. python爬取网易云音乐歌曲评论信息
  18. 凡科建站之音乐古筝网站建设案例分析
  19. 疯狂Java讲义(七)----第一部分
  20. html 图片遮盖,html实现图片遮盖

热门文章

  1. OpenCV实践之路——雅虎色情图片检测神经网络试用报告
  2. MarkDown 编辑器——Moeditor
  3. 权威发布|恭喜 Apache Doris PPMC 陈明雨入选 2021 中国开源先锋 33 人之心尖上的开源人物...
  4. 卡内基梅隆大学(CMU)的Eric Xing(邢波)教授为什么能读完一般学校的分子生物学PhD后到伯克利去CS PhD?
  5. 【Java】数据交换
  6. hdu-1878欧拉回路
  7. 拜日式精准引导词_瑜伽拜日式全套引导词
  8. 狗蛋与babel的初遭遇
  9. MySQL 一条语句实现若记录存在则更新,不存在则插入
  10. 剑指offer46. 把数字翻译成字符串