hadoop Partitioner 分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import  org.apache.hadoop.io.Text;
import  org.apache.hadoop.mapreduce.Partitioner;
/* 测试 Partitioner 分区
  */
public class TestPartitioner extends Partitioner<Text, Text>{
     /*
      * 接受的两个是应该是输入的<key value> 的数据类型 然后根据传进来的 的key 应该有三种结果long right short 然后进行区分输出文件
      */
                                                                                                 
     @Override
     public int getPartition(Text key, Text value, int numPartition) {
                                                                                                     
         /*
          *  numPartition = job.setNumReduceTasks(3); 在运行类设置
          *  numPartition 分多少个reduce 或者分多少个 文件数量
          *  如果是伪分布式 出来的文件 也只有一个而已 因为 他无法设置 reduce的数量 要么一个 要么 0个reduce
          *  但是输出的文件是排序了的
          */
                                                                                                     
         int  result =  0 ;
         if (key.equals( "long" )){
             result =  0  % numPartition;  //part-r-00000 输出到的文件
         else  if  (key.equals( "short" )){
             result =  1  % numPartition;  //part-r-00001
         else  if  (key.equals( "right" )){
             result =  2  % numPartition;  //part-r-00002
         }
         return  result;
     }
}


这里建立的基础是

有数据 如同下面


1
2
3
4
mrwang     11  
huai     13     14  
ting     66     77  
xiaowang     77     88     99


其中 第一行 只有两列数据

第四行 有四列数据

而我们希望只计算三列数据的

于是我们就可以用 Partitioner 进行区分数据 或者区分文件

他是通过在map阶段输入数据并且 通过指定某个reduce 去达到 分区的效果的

默认使用的是 HashPartitioner 

job.setPartitionerClass() 应该是可以通过这样去使用partitioner 


本文转自    拖鞋崽      51CTO博客,原文链接:http://blog.51cto.com/1992mrwang/1206346


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值