博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mapreduce自定义分组、自定义分区、二次排序
阅读量:3893 次
发布时间:2019-05-23

本文共 1038 字,大约阅读时间需要 3 分钟。

mapreduce中二次排序的思想中,我们常常需要对数据的分区分组进行自定义,

以下就介绍一下自定义分区分组的简单实现

1、自定义分区:

public class demoPartitioner
extends Partitioner
{ @Override //注意有几个分区reduce任务就有几个 public int getPartition(K key, V value, int numPartitions) { String op=key.toString(); switch(op) { case "张村":return 0; case "李村":return 1; case "王村":return 2; case "赵村":return 3; } return 4; }}

要注意的是:设置了分区之后,reduce任务的个数就只能设置和分区数量一样的个数了!!

2、自定义分组:

class demoGroup implements RawComparator
{ public int compare(Object o1, Object o2) { return 0; } /** * b1 第一个参与比较的字节数组 * s1 第一个字节数组中开始比较的位置 * l1 第一个字节数组参与比较的长度 * b2 第二个参与比较的字节数组 * s2 第二个字节数组中开始比较的位置 * l2 第二个字节数组参与比较的长度 */ public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { return WritableComparator.compareBytes(b1, s1, 1, b2, s2, 1); }}

3、场景模拟:对于二次排序的思想

当出现以下需求

A     1      1                          A       1        1

B     2      3           》》       A        2       0

A     2      0                          B       2       3

这个时候可以让A1、A2、B2这三个当做key来排序,

实现排序功能,但这个时候A1,A2不应该在不同的分区或者组内

显然A、B应为分区,分组的条件,这时候就需要自定义分区和分组了

 

转载地址:http://dpahn.baihongyu.com/

你可能感兴趣的文章
Leetcode - 14最长公共前缀
查看>>
Leetcode - 7整数反转
查看>>
PAT---B1022. D进制的A+B (20)
查看>>
PAT---B1037. 在霍格沃茨找零钱(20)
查看>>
PAT---A1019. General Palindromic Number (20)
查看>>
PAT---A1027. Colors in Mars (20)
查看>>
PAT---1058. A+B in Hogwarts (20)
查看>>
PAT---A1001. A+B Format (20)
查看>>
PAT---A1005. Spell It Right (20)
查看>>
PAT---A1035. Password (20)
查看>>
PAT---A1077. Kuchiguse (20)
查看>>
PAT---A1062. Talent and Virtue (25)
查看>>
PAT---A1012. The Best Rank (25)
查看>>
数据库SQL语言语法总结3---查询语句
查看>>
数据库SQL语言语法总结4---数据更新
查看>>
数据库SQL语言语法总结5---视图
查看>>
数据库SQL语言语法总结6---数据控制
查看>>
数据库SQL语言语法总结7---嵌入式SQL
查看>>
数据库SQL语言语法总结1---表操作
查看>>
Numpy中stack(),hstack(),vstack()函数详解
查看>>