当前位置: 首页 > news >正文

沈阳市城乡建设局网站网络舆情

沈阳市城乡建设局网站,网络舆情,专业制作外贸网站,提高网站目标流量本文我们学习MapReduce默认分区以及自定义分区实践 当我们要求将统计结果按照条件输出到不同文件(分区)&#xff0c;比如按照统计结果将手机归属地不同省份输出到不同文件中(分区) 1.默认Partitioner分区 public class HashPartitioner<K, V> extends Partitioner<…

本文我们学习MapReduce默认分区以及自定义分区实践

当我们要求将统计结果按照条件输出到不同文件(分区),比如按照统计结果将手机归属地不同省份输出到不同文件中(分区)

1.默认Partitioner分区

public class HashPartitioner<K, V> extends Partitioner<K, V> {public int getPartition(K key, V value,int numReduceTasks) {return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;}
}

默认分区是根据key的hashCode对ReduceTasks[通过job.setNumReduceTasks(2)赋值]取模得到,用户没法控制key存储到哪个分区

2. 自定义Partitioner分区

  • 我们在resources目录下新建phone2.txt
1 13764368888 196.168.0.11 1116 854 200
2 13764368888 196.168.0.11 1136 834 200
3 13764368888 196.168.0.11 1146 824 200
4 13764368888 196.168.0.11 1116 804 200
5 13664368888 196.168.0.11 1116 854 200
6 13864368888 196.168.0.11 1136 834 200
7 13964368888 196.168.0.11 1146 824 200
8 13764368888 196.168.0.11 1116 804 200
  • 新建自定义ProvincePartitioner类
public class ProvincePartitioner extends Partitioner<Text, FlowBean> {@Overridepublic int getPartition(Text text, FlowBean flowBean, int numPartitions) {// Text是手机号String phone = text.toString().substring(0, 3);// 注意分区号需要连续,从0开始分区int partition;if ("136".equals(phone)) {partition = 0;} else if ("137".equals(phone)) {partition = 1;} else if ("138".equals(phone)) {partition = 2;} else if ("139".equals(phone)) {partition = 3;} else {partition = 4;}return partition;}
}
  • 新建FlowPartitionerDriver类
public class FlowPartitionerDriver {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "flowPartitioner");job.setJarByClass(FlowPartitionerDriver.class);job.setMapperClass(FlowMapper.class);job.setCombinerClass(FlowReduce.class);job.setReducerClass(FlowReduce.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(FlowBean.class);// 关联自定义分区类job.setPartitionerClass(ProvincePartitioner.class);// 设置ReduceTask任务数job.setNumReduceTasks(5);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
  • 传参运行
E:\Java\blogCode\hadoop\src\main\resources\phone2.txt E:\Java\blogCode\hadoop\src\main\resources\phone_ret2.txt

由图可知,产生了5个分区,实现了手机归属地不同省份输出到不同文件中

3.分区总结

  1. 如果ReduceTask数量>getPartition结果数,则会多产生空的part-r-000xx文件
  2. 如果1<ReduceTask数量<getPartition结果数,则有一部分数据无处写,会Exception
  3. 如果ReduceTask数量=1,则不管MapTask输出多少分区文件,最终结果都会交给一个ReduceTask,只会产生一个文件part-r-00000
  4. 分区号必须从零开始,逐一累加

欢迎关注公众号算法小生与我沟通交流

http://www.hkea.cn/news/862306/

相关文章:

  • 怎么知道一个网站是谁做的中国最大的企业培训公司
  • m2c是什么意思南昌百度seo
  • 专业做羽绒服的服装网站域名注册网
  • 公司网站建设需要显示什么软件世界球队最新排名
  • 做微信平台图片网站有没有免费的广告平台
  • 渭南网站建设风尚网络站长工具seo词语排名
  • 广告传媒网站模板免费网站推广方式
  • 如何用api方式做网站域名批量查询工具
  • wordpress 网易云跟帖优化合作平台
  • 建设党建网站联盟青岛网站推广公司
  • 石湾网站建设湘潭关键词优化服务
  • 淘宝优惠券怎么做网站网络服务提供商
  • 哪里有网站建设电话查排名官网
  • 做网站需要准备的工具网络营销方案模板
  • 科技未来网站建设百度推广开户公司
  • 十度网站建设保定网站推广公司
  • php可以做视频网站有哪些软文推广渠道主要有
  • 成都网站建设桔子科技淘宝付费推广有几种方式
  • 福田的网站建设公司网络营销成功案例ppt免费
  • 网站建设英文专业术语百度推广网址
  • 做网站之前需要准备什么企业网络营销策划案
  • dreamweaver动态网站开发与设计教程内容怎么在百度上面打广告
  • 济南网站搜索优化深圳网络推广招聘
  • 网站 色彩武汉it培训机构排名前十
  • 怎么做资源网站网络培训中心
  • 服装品牌网站建设营销网站建设选择原则
  • 乌鲁木齐新市网站建设有哪些网络营销公司
  • 网站的后台怎么做企业网络规划设计方案
  • 做网站文字字号大小企业网站设计要求
  • ae有么有做gif的网站品牌推广方案范文