• 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;

        }

    }


    }
  • 相关阅读:
    HDOJ 1028 母函数分析
    尼姆博弈的典型例题
    HDOJ1232 畅通工程 DFS
    第一个八皇后
    HDOJ 1242
    我的“插入算法”实现
    第五讲 this 类变量 类方法
    我的“二分查找算法”实现
    我对锤子ROM 功能的看法——视觉篇
    第六讲 Java 四大特性:抽象 封装 继承 多态
  • 原文地址:https://www.cnblogs.com/lijins/p/10079377.html
Copyright © 2020-2023  润新知