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