我是用avro编写hadoopmapreduce的初学者,不清楚向map/reduce方法传递一对字符串、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));
}
感谢您的帮助!
1条答案
按热度按时间62lalag41#
CharSequence
是一个“捆绑”大多数基于字符的实现的接口,如StringBuilder
,StringBuffer
,CharBuffer
,String
在阿夫罗Utf8
.String
是不可变的,这意味着您不能修改内部数据—您所做的每一次修改都将导致一个新的String
正在创建对象。Utf8
另一方面,将允许您修改其内部缓冲区(“可变”),这将生成更少的垃圾,而不是使用String
示例。所以你可以用
CharSequence
是最灵活的解决方案,因为它允许您传递比专用实现更多的字符串表示形式,所以您可以根据需要从可用的实现中进行选择。