3

在我的 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() 来检索实例。

4

1 回答 1

6

为此,您应该使用NullWritable

于 2013-04-09T12:11:40.340 回答