Hadoop自定义可序列化的类
来源:互联网 发布:php统计字符串长度 编辑:程序博客网 时间:2024/05/18 13:45
在hadoop框架中实现自定义类可以被序列化。
- package com.rpc.nefu;
- import java.io.DataInput;
- import java.io.DataOutput;
- import java.io.IOException;
- import org.apache.hadoop.io.IntWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.io.WritableComparable;
- //自定义的序列化方法,只需要实现WritableComparable接口,重写一些方法即可 主要就是 readFields() write() compareTo()
- public class personWritable implements WritableComparable<personWritable>{
- private Text name;
- private IntWritable age;
- private Text sex;
- public personWritable(){
- set("name",-1,"female");
- }
- public personWritable(String _name,int _age,String _sex){
- set(_name,_age,_sex);
- }
- public void set(String name,int age,String sex){
- this.name = new Text(name);
- this.age = new IntWritable(age);
- this.sex = new Text(sex);
- }
- //反序列化过程,将datainput的内容还原为hadoop对象
- @Override
- public void readFields(DataInput in) throws IOException {
- // TODO Auto-generated method stub
- name.readFields(in);
- age.readFields(in);
- sex.readFields(in);
- }
- //序列化过程
- @Override
- public void write(DataOutput out) throws IOException {
- // TODO Auto-generated method stub
- name.write(out);
- age.write(out);
- sex.write(out);
- }
- @Override
- public int compareTo(personWritable other) {
- // TODO Auto-generated method stub
- int cmp1 = name.compareTo(other.name);
- if(cmp1!=0){
- return cmp1;
- }
- int cmp2 = age.compareTo(other.age);
- if(cmp2!=0){
- return cmp2;
- }
- int cmp3 = sex.compareTo(other.sex);
- return cmp3;
- }
- //判断是否相等
- public boolean equals(Object o){
- if(o instanceof personWritable){
- personWritable pw = (personWritable) o;
- return name.equals(pw.name)&&age.equals(pw.age)&&sex.equals(pw.sex);
- }
- return false;
- }
- //哈希值
- public int hashCode(){
- return name.hashCode()*3+age.hashCode()*5+sex.hashCode()*7;
- }
- public String toString(){
- StringBuffer sb = new StringBuffer();
- sb.append("--");
- sb.append("姓名:"+name+"_");
- sb.append("年龄:"+age+"_");
- sb.append("性别:"+sex+"_");
- sb.append("--");
- return sb.toString();
- }
- }
- package com.rpc.nefu;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- //import org.apache.hadoop.io.Writable;
- //将序列化的对象的内容返回到一个字节数组中去 记录序列的过程
- public class hadoopSerializable {
- public static byte[] serialize(personWritable writable) throws IOException{
- //创建一个字节数组
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- //创建一个DataOutputStream,将字节数组传递进去,保存输出的序列化后的内容
- DataOutputStream dataout = new DataOutputStream(out);
- //让参数的Hadoop对象序列化到字节流中
- writable.write(dataout);
- dataout.close();
- //返回序列化后的字节流
- return out.toByteArray();
- }
- /**
- *这个方法用于反序列化一个字节数组成Hadoop Writable对象
- *@param writable 反序列化后的Writable对象存放在这个参数中
- *@param bytes 被反序列化的字节数组 对应于上面序列化的bytes
- **/
- public static void deserialize(personWritable writable,byte[] bytes) throws Exception{
- ByteArrayInputStream in = new ByteArrayInputStream(bytes);
- //创建一个DataInputStream
- DataInputStream datain = new DataInputStream(in);
- //让Hadoop框架反序列化这个字节数组,还原后的Writable对象存放到第一个参数中
- writable.readFields(datain);
- datain.close();
- }
- }
- package com.rpc.nefu;
- import org.apache.hadoop.util.StringUtils;
- public class serializeTest {
- public static void main(String [] args) throws Exception{
- /*把我们自定义的Hadoop可序列化对象进行序列化 */
- System.out.println("Hadoop--对象序列化");
- personWritable pw = new personWritable("XD",23,"Male");
- String imformation= "自定义可序列化Hadoop类型为: "+pw.getClass().getName()+"\n";
- String primaryPersonWritableInfo = "序列化前对象为: "+pw.toString()+"\n";
- //开始序列化过程
- byte[] serializedValue =hadoopSerializable.serialize(pw);
- String lengthInfo= "序列化后的字节数组长度为: "+serializedValue.length+"\n";
- String serializeValueInfo= "序列化后的值为: " +StringUtils.byteToHexString(serializedValue)+"\n";
- System.out.println(imformation+primaryPersonWritableInfo+lengthInfo+serializeValueInfo+"\n");
- System.out.println();
- //把我们序列化之后的字节数组反序列化为原始Hadoop对象
- System.out.println("反序列化--Hadoop");
- personWritable reversePersonWritable = new personWritable();
- /*StringUtils.byteToHexString 类似将自己数组转化为字符串*/
- String originalByteArrayInfo="被反序列化的字节数组内容为: "+StringUtils.byteToHexString(serializedValue)+"\n";
- //开始反序列化过程
- hadoopSerializable.deserialize(reversePersonWritable, serializedValue);
- String restoredValueInfo = "反序列化之后的Writable对象为: "+reversePersonWritable.toString();
- System.out.println(originalByteArrayInfo+restoredValueInfo+"\n");
- }
- }
0 0
- Hadoop自定义可序列化的类
- 自定义类可序列化
- hadoop自定义序列化
- 可序列化和自定义序列化
- Hadoop 自定义序列化编程
- 自定义带结构的可序列化数据集DataSet.
- 自定义带结构的可序列化数据集DataSet.
- 自定义带结构的可序列化数据集DataSet.
- 自定义带结构的可序列化数据集DataSet
- 使用目前hadoop内置的序列化类(不使用自定义序列化类),实现流量统计的功能
- hadoop学习之路_10、自定义序列化类
- 异常类的可序列化
- Hadoop的序列化
- (转载CSDN)序列化:创建可序列化的类
- Hadoop中的序列化:自定义value类型
- hadoop 序列化和排序,自定义分区
- Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】
- Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】
- LabVIEW上位机与串口通信
- 事件对象
- JSON转为对象&集合to JSON串&Spring MVC传JSON到前台without ajax
- SQL Server 事务隔离级别详解
- CentOS配置smaba与Windows共享文件
- Hadoop自定义可序列化的类
- JQuery判断子iframe何时加载完成解决方案
- Obj-C++混编
- 集合(一)Collection、List集合、Set集合
- 线性表综述
- listener
- 游戏开发中的心理学(一):认知失调有前提条件
- 设a和b是两个正整数,a<=b,计算a和b之间约数个数最多的整数
- 在Ubuntu操作系统上安装mono和jexus搭建.NET的运行环境