zoukankan      html  css  js  c++  java
  • Writable序列化

    序列化:将内存中的对象 转换成字节序列以便于存储在磁盘上或者用于网络传输。

    反序列化:将磁盘或者从网络中接受到的字节序列,装换成内存中的对象。

    自定义bean对象(普通java对象)要想序列化传输,必须实现序列化接口。

    1)必须实现Writable接口

    2反序列化时,需要反射调用空参构造函数,所以必须有空参构造

    3)重写序列化方法

    4)重写反序列化方法

    5注意反序列化的顺序和序列化的顺序完全一致

    6)要想把结果显示在文件中,需要重写toString(),且” ”分开,方便后续用

    7)如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序

    package com.mapreduce.flow;
    
    import java.io.DataInput;
    import java.io.DataOutput;
    import java.io.IOException;
    
    import org.apache.hadoop.io.Writable;
    
    /*
     * 实现writable 接口
     * 目的: 能够序列化和反序列化 用户自定义的bean对象( 用hadoop 的序列化机制 )
     * 
     */
    public class FlowBean implements Writable {
    
        
        private long upFlow;
        private long downFlow;
        private long sumFlow;
        
        public FlowBean(){
            super();
        }
        
        /*
         * 序列化对象
         *
         */
        public void write(DataOutput out) throws IOException {
            out.writeLong(this.upFlow);
            out.writeLong(this.downFlow);
            out.writeLong(this.sumFlow);
        }
        /*
         *  反序列化对象
         *  
         */
        public void readFields(DataInput in) throws IOException {
            
            upFlow = in.readLong();
            downFlow = in.readLong();
            sumFlow = in.readLong();
        }
    
        
        public String toString() {
            return  upFlow + "	" + downFlow + "	" + sumFlow;
        }
      
      

       //7 如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序

        @Override

        public int compareTo(FlowBean o) {

          // 倒序排列,从大到小

          return this.sumFlow > o.getSumFlow() ? -1 : 1;

        }

    }


    }
  • 相关阅读:
    Linux手动安装Apache2.4
    Linux 定时任务 crontab
    微信小程序 wxs 使用正则替换字符串
    腾讯云 远程通过端口3306访问MYSQL数据库
    微信小程序点击内容展开隐藏评论文章等
    SGA设置
    oracle 序列
    oracle中lnnvl函数
    union 中null值合并原理
    oracle 事务读一致性(一)
  • 原文地址:https://www.cnblogs.com/lijins/p/10079377.html
Copyright © 2011-2022 走看看