Hadoop中的序列化:自定义value类型

NullWritable序列化不包含任何字符,仅仅相当于个占位符,在使用mapreduce时,key或者value在无需使用时,可以定义为NullWritable
hadoop的value类型只需实现Writable接口,key类型需要实现WritableComparable接口
自定义对象中有String字段时
dataOutput.writeUTF(对象)用Text.writeString(out, 对象)代替

dataInput.readUTF()用Text.readString(dataInput)代替

注意:Hadoop中的基本类型直接调用其本身的readFileds和write方法

序列化集合类型时,需要给出List,Set,Map的size,反序列化的时候也要写出size

直接给出代码示例如下:

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;


public class Episode implements Writable{


private String episodeID;  //剧集ID
private List<String> alias;   //别名
private List<String> title;  //剧集名称
private String channelType;  //所属频道
private List<String> keyword;  //剧集关键字
private List<String> directors;  //导演
private List<String> roles;  //角色
private List<String> actors;  //演员
private String description;  //简介

public Episode(){

}

public List<String> getRoles() {
return roles;
}


public void setRoles(List<String> roles) {
this.roles = roles;
}


public List<String> getActors() {
return actors;
}


public void setActors(List<String> actors) {
this.actors = actors;
}


public String getEpisodeID() {
return episodeID;
}
public void setEpisodeID(String episodeID) {
this.episodeID = episodeID;
}
public List<String> getAlias() {
return alias;
}
public void setAlias(List<String> alias) {
this.alias = alias;
}
public List<String> getTitle() {
return title;
}
public void setTitle(List<String> title) {
this.title = title;
}
public String getChannelType() {
return channelType;
}
public void setChannelType(String channelType) {
this.channelType = channelType;
}
public List<String> getKeyword() {
return keyword;
}
public void setKeyword(List<String> keyword) {
this.keyword = keyword;
}
public List<String> getDirectors() {
return directors;
}


public void setDirectors(List<String> directors) {
this.directors = directors;
}


public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}


@Override
public String toString() {
return "Episode [episodeID=" + episodeID + ", alias=" + alias
+ ", title=" + title + ", channelType=" + channelType
+ ", keyword=" + keyword + ", directors=" + directors
+ ", roles=" + roles + ", actors=" + actors + ", description="
+ description + "]";
}


@Override
public void write(DataOutput output) throws IOException {
if(output != null){
// out.writeUTF(episodeID);
Text.writeString(output, episodeID);
output.writeInt(alias.size());
for(String alia:alias){
Text.writeString(output, alia);
}
output.writeInt(title.size());
for(String subTitle:title){
Text.writeString(output, subTitle); 
}
Text.writeString(output, channelType);
output.writeInt(keyword.size());
for(String subKeyword:keyword){
Text.writeString(output, subKeyword);
}
output.writeInt(directors.size());
for(String director:directors){
Text.writeString(output, director);
}
output.writeInt(roles.size());
for(String role:roles){
Text.writeString(output, role);
}
output.writeInt(actors.size());
for(String actor:actors){
Text.writeString(output, actor);
}
Text.writeString(output, description);
}
}


@Override
public void readFields(DataInput input) throws IOException {
// episodeID=in.readUTF();
if(input != null){
episodeID=Text.readString(input);
int aliasLength=input.readInt();
alias=new ArrayList<String>();
for(int index=0;index<aliasLength;index++){
alias.add(Text.readString(input));
}
int titleLength=input.readInt();
title=new ArrayList<String>();
for(int index=0;index<titleLength;index++){
title.add(Text.readString(input));
}
channelType=Text.readString(input);
int keywordLength=input.readInt();
keyword=new ArrayList<String>();
for(int index=0;index<keywordLength;index++){
keyword.add(Text.readString(input));
}
int directorsLength=input.readInt();
directors=new ArrayList<String>();
for(int index=0;index<directorsLength;index++){
directors.add(Text.readString(input));
}
int rolesLength=input.readInt();
roles=new ArrayList<String>();
for(int index=0;index<rolesLength;index++){
roles.add(Text.readString(input));
}
int actorsLength=input.readInt();
actors=new ArrayList<String>();
for(int index=0;index<actorsLength;index++){
actors.add(Text.readString(input));
}
description=Text.readString(input);
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值