mapreduce与java中的avro:string vs charsequence vs utf8数据类型

arknldoa  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(404)

我是用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));
        }

感谢您的帮助!

62lalag4

62lalag41#

CharSequence 是一个“捆绑”大多数基于字符的实现的接口,如 StringBuilder , StringBuffer , CharBuffer , String 在阿夫罗 Utf8 . String 是不可变的,这意味着您不能修改内部数据—您所做的每一次修改都将导致一个新的 String 正在创建对象。 Utf8 另一方面,将允许您修改其内部缓冲区(“可变”),这将生成更少的垃圾,而不是使用 String 示例。
所以你可以用 CharSequence 是最灵活的解决方案,因为它允许您传递比专用实现更多的字符串表示形式,所以您可以根据需要从可用的实现中进行选择。

相关问题