在我的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()。