在我的 mapreduce 工作中,我只想输出一些行。
但如果我这样编码: context.write(data, null);
该程序将抛出 java.lang.NullPointerException。
我不想编写如下代码: context.write(data, new Text(""));
因为我必须修剪输出文件中每一行的空格。
有什么好的方法可以解决吗?提前致谢。
对不起,是我的错。我仔细检查了程序,发现原因是我将Reducer设置为combiner。
如果我不使用组合器,语句 context.write(data, null); 在减速机工作正常。在输出数据文件中,只有数据行。
分享 hadoop 权威指南中的 NullWritable 解释:
NullWritable 是 Writable 的一种特殊类型,因为它具有零长度序列化。没有字节被写入流或从流中读取。它用作占位符;例如,在 MapReduce 中,当您不需要使用该位置时,可以将键或值声明为 NullWritable——它有效地存储了一个常量空值。当您想要存储值列表时,NullWritable 也可以用作 SequenceFile 中的键,而不是键值对。它是一个不可变的单例:可以通过调用 NullWritable.get() 来检索实例。