在Apache Hadoop map-reduce程序中,在映射器的输出中使用sets/lists作为键的选项有哪些?在Hadoop中为中间键使用set/list数据类型
我最初的想法是使用ArrayWritable
作为键类型,但这是不允许的,因为该类不执行WritableComparable
。我是否需要定义一个自定义类,或者是否有其他一些类似Hadoop库中的类可以充当键?
在Apache Hadoop map-reduce程序中,在映射器的输出中使用sets/lists作为键的选项有哪些?在Hadoop中为中间键使用set/list数据类型
我最初的想法是使用ArrayWritable
作为键类型,但这是不允许的,因为该类不执行WritableComparable
。我是否需要定义一个自定义类,或者是否有其他一些类似Hadoop库中的类可以充当键?
我以为ArrayWritable实现了Writable,它是WritableComparable的超级接口。
你子类ArrayWritable?根据文档,您需要对其进行子类化,以便可以设置数组要存储的对象的类型。例如:
public class TextArrayWritable extends ArrayWritable {
public TextArrayWritable() {
super(Text.class);
}
}
'ArrayWritable'实现'Writable'而不是'WritableComparable',显然后者是用于键的类所必需的。我可以继承'ArrayWritable'并添加对'WritableComparable'接口的支持,但这是必要的吗? – 2010-01-31 21:31:28
对不起,看起来更接近。关键需要WritableComparable,因为hadoop需要能够对键进行排序。所以,是的,你可以实现WritableComparable接口,它只需要你重写compareTo方法。希望这可以帮助。 – 2010-01-31 21:51:52
你可以给你的使用情况下,你使用列表/设置为映射的关键字 – 2014-04-23 08:23:06
@PradyumnaMohapatra我的问题已经超过四年了,但我的中间密钥是一组产品一起购买,中间值是这个子集的订单ID。然后,“减少”方法将计算每个不同产品组的出现。 – 2014-04-25 12:22:15