我是用Avro编写Hadoop MapReduce的初学者,不清楚将Pair with String、CharSequence或Utf8传递到map/reduce方法之间有什么区别?
如果字符串只是简单的类似于"你好世界"的东西呢?
例如,这里有一个简单的映射方法,在本例中使用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));
}
感谢您的帮助!
CharSequence
是一个接口,它"捆绑"了大多数基于字符的实现,如StringBuilder
、StringBuffer
、CharBuffer
、String
和Avro Utf8
。
String
是不可变的,这意味着你不能修改内部数据——你所做的每一次修改都会导致创建一个新的String
对象。
另一方面,Utf8
将允许您修改其内部缓冲区("可变"),与使用String
实例相比,这将生成更少的垃圾。
因此,您可以说使用CharSequence
是最灵活的解决方案,因为它允许您传递比专用实现多得多的字符串表示,因此您可以根据需要从可用的实现中进行选择。