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



我是用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是一个接口,它"捆绑"了大多数基于字符的实现,如StringBuilderStringBufferCharBufferString和Avro Utf8

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

另一方面,Utf8将允许您修改其内部缓冲区("可变"),与使用String实例相比,这将生成更少的垃圾。

因此,您可以说使用CharSequence是最灵活的解决方案,因为它允许您传递比专用实现多得多的字符串表示,因此您可以根据需要从可用的实现中进行选择。

最新更新