当前位置:   article > 正文

mapreduce分区

mapreduce分区

目录

 性别分区器 Partitioner的泛型kv类型是map阶段输出的kv类型

SexPartitioner

 

 Driver

   //7.设置自定义分区和reduce task的个数


案例
计算用户消费的总金额,根据用户的不同性别,将结果输出到不同的文件中

在之前的基础上添加

SexPartitioner

入口文件示例

 性别分区器
 Partitioner的泛型kv类型是map阶段输出的kv类型

SexPartitioner

  1. package com.igeekhome.mapreduce.sale;
  2. import com.igeekhome.mapreduce.model.UserSale;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Partitioner;
  5. /**
  6. * 性别分区器
  7. * Partitioner的泛型kv类型是map阶段输出的kv类型
  8. */
  9. public class SexPartitioner extends Partitioner<Text, UserSale>{
  10. @Override
  11. public int getPartition(Text text, UserSale userSale, int i) {
  12. //获取用户的性别
  13. String sex = userSale.getSex();
  14. //设置分区号
  15. int partitionNum = 0;
  16. if (sex.equals("男")){
  17. partitionNum = 0;
  18. } else if (sex.equals("女")) {
  19. partitionNum = 1;
  20. }else{
  21. partitionNum = 2;
  22. }
  23. return partitionNum;
  24. }
  25. }

 其中返回的0,1,2表示最终输出文件的

 

 Driver

  1. package com.igeekhome.mapreduce.sale;
  2. import com.igeekhome.mapreduce.model.UserSale;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Job;
  7. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  8. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  9. import java.io.IOException;
  10. public class SaleDriver {
  11. public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
  12. //1.获取配置对象和job对象
  13. Configuration conf = new Configuration();
  14. Job job = Job.getInstance(conf);
  15. //2.设置Driver类对象
  16. job.setJarByClass(SaleDriver.class);
  17. //3.设置mapper和reducer类对象
  18. job.setMapperClass(SaleMapper.class);
  19. job.setReducerClass(SaleReducer.class);
  20. //4.设置map阶段输出的kv对象
  21. job.setMapOutputKeyClass(Text.class);
  22. job.setMapOutputValueClass(UserSale.class);
  23. //5.设置最终输出的kv类对象
  24. job.setOutputKeyClass(Text.class);
  25. job.setOutputValueClass(UserSale.class);
  26. //6.设置读取文件的路径 和 输出文件的路径
  27. FileInputFormat.setInputPaths(job,new Path("D:\\code\\sale_details (1).txt"));
  28. FileOutputFormat.setOutputPath(job,new Path("D:\\code\\output"));
 
  //7.设置自定义分区和reduce task的个数
  1. //7.设置自定义分区和reduce task的个数
  2. job.setPartitionerClass(SexPartitioner.class);
  3. job.setNumReduceTasks(3);
  1. //8.提交job
  2. boolean result = job.waitForCompletion(true);
  3. System.out.println(result?"计算成功":"计算失败");
  4. }
  5. }

 

 计算结果

part-r-00000

 part-r-00001

 

 part-r-00002

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号