Java中Avro的MapReduce:String vs CharSequence与Utf8数据类型

时间:2013-12-09 16:19:14

标签: java hadoop mapreduce avro

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

感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

CharSequence is an interface that "bundles"大部分基于角色的实施,例如StringBuilderStringBufferCharBufferString以及Avro Utf8

String是不可变的,这意味着你无法修改内部数据 - 你所做的每一次修改都会导致创建一个新的String对象。

Utf8 on the other hand will allow you to modify its internal buffer ("mutable"),与使用String实例相比,这将产生更少的垃圾。

所以你可以说使用CharSequence是最灵活的解决方案,因为它允许你传递更多的字符串表示而不是专门的实现,你可以根据你的选择从可用的实现中选择需要。