我尝试实现自定义可写而不是使用 IntWritable。背后的原因是我想拥有一对价值观。特别是我想实现以下目标:user_id;counter;length_of_messages;
输入文件如下:
user_id;time_stamp;length_of_messages
然后输出文件应汇总信息
user_id;counter;length_of_messages
从语义上讲,我通过汇总用户在本周内写消息的次数以及他在本周内消息长度的总和来获得给定时间段(例如 1 周)的用户统计信息。
public class ValuesWritable implements Writable {
private int counter;
private int durations;
public void write (DataOutput out) throws IOException{
out.writeInt(counter);
out.writeInt(durations);
}
public void readFields(DataInput in) throws IOException{
counter = in.readInt();
durations = in.readInt();
}
public ValuesWritable read(DataInput in) throws IOException{
ValuesWritable v = new ValuesWritable();
v.readFields(in);
return v;
}
}
我将这个类作为内部类包含在我的 mapreduce 作业类中。我现在的问题是:我如何与这个类进行交互?我从哪里获得 DataOutput 和 DataInput?我阅读了教程http://developer.yahoo.com/hadoop/tutorial/module5.html#keytypes并为我的目的修改了示例。但现在我无法编译我的课程。