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