如何在context.write(k,v)中输出值

时间:2013-04-09 10:39:05

标签: hadoop mapreduce output

在我的mapreduce工作中,我只想输出一些行。

但如果我这样编码:     context.write(data,null);

程序将抛出java.lang.NullPointerException。

我不想像下面那样编码:     context.write(data,new Text(“”));

因为我必须修剪输出文件中每一行的空白区域。

有什么好方法可以解决吗? 提前谢谢。


对不起,这是我的错。我仔细检查了程序,发现原因是我将Reducer设置为合并器。

如果我不使用合并器,声明     context.write(data,null); 在减速机工作正常。在输出数据文件中,只有数据行。


从hadoop权威指南中分享NullWritable解释:

NullWritable是一种特殊类型的Writable,因为它具有零长度序列化。没有字节 写入流或从流中读取。它用作占位符;例如,在 MapReduce,键或值可以在不需要时声明为NullWritable 使用该位置 - 它有效地存储一个恒定的空值。 NullWritable也可以 当您想要存储值列表时,相反,它可用作SequenceFile中的键 到键值对。它是一个不可变的单例:可以通过调用来检索实例 NullWritable.get()。

1 个答案:

答案 0 :(得分:5)

您应该使用NullWritable来实现此目的。