我是使用Avro编写Hadoop MapReduce的初学者,目前还不清楚传入map / reduce方法与String,CharSequence或Utf8之间的区别是什么?
如果字符串只是“hello world”之类的内容怎么办?
这是一个简单的map方法,例如,使用CharSequence作为输出键类型:
public void map(Pair<CharSequence, Integer> datum, AvroCollector<Pair<CharSequence, Integer>> collector, Reporter reporter) throws IOException {
Integer number_one = new Integer(1);
String output_key = "hello world";
collector.collect(new Pair<CharSequence, Integer>(output_key, one));
}
感谢任何帮助!
答案 0 :(得分:5)
CharSequence
is an interface that "bundles"大部分基于角色的实施,例如StringBuilder
,StringBuffer
,CharBuffer
,String
以及Avro Utf8
。
String
是不可变的,这意味着你无法修改内部数据 - 你所做的每一次修改都会导致创建一个新的String
对象。
Utf8
on the other hand will allow you to modify its internal buffer ("mutable"),与使用String
实例相比,这将产生更少的垃圾。
所以你可以说使用CharSequence
是最灵活的解决方案,因为它允许你传递更多的字符串表示而不是专门的实现,你可以根据你的选择从可用的实现中选择需要。