Ven*_*k K 27 java hadoop mapreduce
什么是使用的优点,NullWritable
对null
使用过的键/值null
文本(即new Text(null)
).我从"Hadoop:The Definitive Guide"一书中看到以下内容.
NullWritable
是一种特殊类型Writable
,因为它具有零长度序列化.没有字节写入或读取流.它用作占位符; 例如,在MapReduce中,NullWritable
当您不需要使用该位置时,可以将键或值声明为- 它有效地存储常量空值.SequenceFile
当您想要存储值列表而不是键值对时,NullWritable也可以用作键.它是一个不可变的单例:可以通过调用来检索实例NullWritable.get()
我不清楚如何使用输出写出输出NullWritable
?在开始输出文件中是否有一个常量值表示该文件的键或值是null
,因此MapReduce框架可以忽略读取null
键/值(以哪个为准null
)?另外,null
文本是如何序列化的?
谢谢,
Venkat
Joe*_*e K 23
键/值类型必须在运行时给出,因此任何写入或读取NullWritables
都将提前知道它将处理该类型; 文件中没有标记或任何内容.从技术上来说,这NullWritables
是"阅读",只是"阅读"a NullWritable
实际上是一种无操作.你可以亲眼看到没有任何书面或阅读:
NullWritable nw = NullWritable.get();
ByteArrayOutputStream out = new ByteArrayOutputStream();
nw.write(new DataOutputStream(out));
System.out.println(Arrays.toString(out.toByteArray())); // prints "[]"
ByteArrayInputStream in = new ByteArrayInputStream(new byte[0]);
nw.readFields(new DataInputStream(in)); // works just fine
Run Code Online (Sandbox Code Playgroud)
至于你的问题new Text(null)
,你可以尝试一下:
Text text = new Text((String)null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
text.write(new DataOutputStream(out)); // throws NullPointerException
System.out.println(Arrays.toString(out.toByteArray()));
Run Code Online (Sandbox Code Playgroud)
Text
什么都行不通null
String
.
归档时间: |
|
查看次数: |
23963 次 |
最近记录: |