Hadoop-从mapper中输出不同值的类型的数据

在Hadoop MapReduce中,当需要从Mapper输出不同类型的值(如IntWritable和Text)时,由于reduce阶段不支持多种输入值类型,可以使用GenericWritable进行封装。本文介绍了如何创建一个自定义的GenericWritable类,用于处理多个值类型,并在Mapper和Reducer中进行应用,以实现IP、请求字长和请求链接的聚合操作。
摘要由CSDN通过智能技术生成

问题来源:
在执行reduce端join操作时,或者我们在多个Mapreduce计算中将不同属性类型的数据聚合成一个数据集合时需要避免复杂性时,从mapper中输出属于多个值类型的数据集合,是非常有用的。偶或者我们需要处理不同的文件书写多个mapper时,每个文件传入的数据类型不同,在进行数据聚合时。然而,Hadoop reduce不允许多个输入值类型。在这种情况下,可以使用Genericwritable类来包装属于不同数据类型的多个value实例。

数据举例:
172.16.31.44 100 www.baidu.com
222.139.215.195 120 www.google.com
222.139.215.195 330 www.360.com
172.16.31.44 400 www.uc.net
222.139.215.195 50 www.pigai.org
上面数据是以制表符分割的,第一个字段为IP,第二个字段表示请求字长,第三个表示请求链接。我们在map阶段以IP作为key值,请求字长和请求链接作为vlaue,目的是汇总相同IP的请求总字长,以及输出请求的所有链接。

输出结果:

172.16.31.44 500——www.uc.net www.baidu.com
222.139.215.195 500——www.pigai.org www.360.com www.google.com

操作步骤:

下列步骤显示了如何实现Hadoop GenericWritable数据类型,该数据类型可以封装数据类型为Intwritable或Text的实例。

  1. 写一个类扩展org.apache.hadoop.io.GenericWritable类。实现getType()方法,返回将要使用的Writable类的数组。如果要添加一个自定定义的构造函数,那么也要确保添加的是一个无参数的默认构造函数。
public class LogValueWritable extends GenericWritable {
   
    //定义要返回的Writable数组
    private static Class[] CLASS = new Class[]{
        Text.class,
        IntWritable.class
    };
    //无参数的默认构造函数
    public LogValueWritable(){}
    //定义Text类型的构造函数
    public LogValueWritable(Text text){
   
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值