Java最全Partition分区及实例,36岁老码农现身说法

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1.需求

将统计结果按照手机归属地不同省份输出到不同文件中(即分区)

输入数据

在这里插入图片描述

期望输出数据

手机号136、137、138、139开头都分别放到一个独立的4个文件中,其他开头的放到一个文件中。

实现分析

(1)代码实现基于MapReduce的序列化

(2)增加一个ProvincePartitioner分区

在这里插入图片描述

(3)修改Driver驱动类

//指定自定义数据分区

job.setPartitionerClass(ProvincePartitioner.class);

//同时指定相应数量的ReduceTask

job.setNumReduceTasks(5);

代码实现


1. MapReduce的序列化

参考代码

2. ProvincePartitioner分区类

package com.atguigu.mr.flowsum;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Partitioner;

public class ProvincePartitioner extends Partitioner<Text, FlowBean> {

@Override

public int getPartition(Text key, FlowBean value, int numPartitions) {

//key是手机号,value是流量信息

//获取手机号前三位

String prePhoneNum = key.toString().substring(0, 3);

int partition = 4;

if (“136”.equals(prePhoneNum)) {

partition = 0;

}else if (“137”.equals(prePhoneNum)) {

partition = 1;

}else if (“138”.equals(prePhoneNum)) {

partition = 2;

}else if (“139”.equals(prePhoneNum)) {

partition = 3;

}else {

partition = 4;

}

return partition;

}

}

3. 修改Driver类

package com.atguigu.mr.flowsum;

import java.io.File;

import java.io.IOException;

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.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.codehaus.jackson.map.ext.JodaDeserializers;

public class FlowsumDriver {

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

args = new String[] {“S:\centos学习笔记\input\ppinput”,“S:\centos学习笔记\output\ppoutput”};

Configuration conf = new Configuration();

//获取job对象

Job job = Job.getInstance(conf);

//设置jar路径

job.setJarByClass(FlowsumDriver.class);

//关联mapper和reducer

job.setMapperClass(FlowCountMapper.class);

job.setReducerClass(FlowCountReducer.class);

//设置mapper输出的key和value的类型

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(FlowBean.class);

//指定自定义数据分区

job.setPartitionerClass(ProvincePartitioner.class);

//同时指定相应数量的ReduceTask

job.setNumReduceTasks(5);

//设置最终输出的key和 value的类型

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(FlowBean.class);

//设置输入输出路径

FileInputFormat.setInputPaths(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

//提交job

boolean result = job.waitForCompletion(true);

System.exit(result ? 0 : 1);

}

}

结果截图


面试准备+复习分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

秋招|美团java一面二面HR面面经,分享攒攒人品

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

[外链图片转存中…(img-TZy1234M-1715321871407)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值