021 大数据中的数据类型

一:概述

1.数据类型

  <key,value>频繁的在磁盘中进行读写,所以需要重新定义数据类型。

  数据类型都实现Writable接口,以便使用这些类型对数据进行序列化,方便网络传输和文件存储。

2.基本数据类型

  BooleanWritable

  ByteWritable

  DoubleWritable

  FloatWritable

  IntWritable

  LongWritable

  Text

  NullWritable

3.数据类型中要实现的两种接口

  1).Writable

  value必须实现。

  write()把每个对象序列化到输出流

  readFileds()是把输入流字节反序列化

  

  2).WritableComparable

  这个是一个新接口,将Writable与Comparable接口封装在一起形成的新接口。

  key必须实现。

  实现了两个接口。

  

二:自定义数据类型

1.要求

  User,Order类。

  必须实现toString(),hashCode(),equals()。

2.实现实例UserWritable

  

3.实现实例OrderWritable

  

三:完整代码

1.UserWritable

 1 package com.senior.type;
 2 
 3 import java.io.DataInput;
 4 import java.io.DataOutput;
 5 import java.io.IOException;
 6 
 7 import org.apache.hadoop.io.Writable;
 8 
 9 public class UserWritable implements Writable{
10 
11     private int id;
12     private String name;
13     public UserWritable(){}
14     public UserWritable(int id,String name){
15         this.id=id;
16         this.name=name;
17     }
18     public int getId() {
19         return id;
20     }
21     public void setId(int id) {
22         this.id = id;
23     }
24     public String getName() {
25         return name;
26     }
27     public void setName(String name) {
28         this.name = name;
29     }
30     //write
31     public void write(DataOutput out) throws IOException {
32         out.writeInt(id);
33         out.writeUTF(name);        
34     }
35     //readFields
36     public void readFields(DataInput in) throws IOException {
37         this.id=in.readInt();
38         this.name=in.readUTF();    
39     }
40     //toString
41     @Override
42     public String toString() {
43         return "UserWritable [id=" + id + ", name=" + name + "]";
44     }
45     //hashCode
46     @Override
47     public int hashCode() {
48         final int prime = 31;
49         int result = 1;
50         result = prime * result + id;
51         result = prime * result + ((name == null) ? 0 : name.hashCode());
52         return result;
53     }
54     //equals
55     @Override
56     public boolean equals(Object obj) {
57         if (this == obj)
58             return true;
59         if (obj == null)
60             return false;
61         if (getClass() != obj.getClass())
62             return false;
63         UserWritable other = (UserWritable) obj;
64         if (id != other.id)
65             return false;
66         if (name == null) {
67             if (other.name != null)
68                 return false;
69         } else if (!name.equals(other.name))
70             return false;
71         return true;
72     }
73     
74 }

2.OrderWritable

 1 package com.senior.type;
 2 
 3 import java.io.DataInput;
 4 import java.io.DataOutput;
 5 import java.io.IOException;
 6 
 7 import org.apache.hadoop.io.WritableComparable;
 8 
 9 public class OrderWritable implements WritableComparable<OrderWritable>{
10     private String orderId;
11     private float price;
12     public OrderWritable(){}
13     public OrderWritable(String orderId,float price){
14         this.orderId=orderId;
15         this.price=price;
16     }
17     public String getOrderId() {
18         return orderId;
19     }
20     public void setOrderId(String orderId) {
21         this.orderId = orderId;
22     }
23     public float getPrice() {
24         return price;
25     }
26     public void setPrice(float price) {
27         this.price = price;
28     }
29         
30     //write
31     public void write(DataOutput out) throws IOException {
32         out.writeUTF(orderId);
33         out.writeFloat(price);        
34     }
35     //readFields
36     public void readFields(DataInput in) throws IOException {
37         in.readUTF();
38         in.readFloat();        
39     }    
40 
41     //compareTo
42     public int compareTo(OrderWritable o) {
43         int comp=this.getOrderId().compareTo(o.getOrderId());
44         if(comp==0){
45             return Float.valueOf(this.getPrice()).compareTo(Float.valueOf(o.getPrice()));
46         }
47         return comp;
48     }
49     
50     //toString
51     @Override
52     public String toString() {
53         return "OrderWritable [orderId=" + orderId + ", price=" + price + "]";
54     }
55     //hashCode
56     @Override
57     public int hashCode() {
58         final int prime = 31;
59         int result = 1;
60         result = prime * result + ((orderId == null) ? 0 : orderId.hashCode());
61         result = prime * result + Float.floatToIntBits(price);
62         return result;
63     }
64     //equals
65     @Override
66     public boolean equals(Object obj) {
67         if (this == obj)
68             return true;
69         if (obj == null)
70             return false;
71         if (getClass() != obj.getClass())
72             return false;
73         OrderWritable other = (OrderWritable) obj;
74         if (orderId == null) {
75             if (other.orderId != null)
76                 return false;
77         } else if (!orderId.equals(other.orderId))
78             return false;
79         if (Float.floatToIntBits(price) != Float.floatToIntBits(other.price))
80             return false;
81         return true;
82     }
83     
84     //
85     
86     
87     
88     
89 
90 }
原文地址:https://www.cnblogs.com/juncaoit/p/5982455.html