2010-01-31 99 views
1

在Apache Hadoop map-reduce程序中,在映射器的输出中使用sets/lists作为键的选项有哪些?在Hadoop中为中间键使用set/list数据类型

我最初的想法是使用ArrayWritable作为键类型,但这是不允许的,因为该类不执行WritableComparable。我是否需要定义一个自定义类,或者是否有其他一些类似Hadoop库中的类可以充当键?

+0

你可以给你的使用情况下,你使用列表/设置为映射的关键字 – 2014-04-23 08:23:06

+0

@PradyumnaMohapatra我的问题已经超过四年了,但我的中间密钥是一组产品一起购买,中间值是这个子集的订单ID。然后,“减少”方法将计算每个不同产品组的出现。 – 2014-04-25 12:22:15

回答

1

我以为ArrayWritable实现了Writable,它是WritableComparable的超级接口。

你子类ArrayWritable?根据文档,您需要对其进行子类化,以便可以设置数组要存储的对象的类型。例如:

public class TextArrayWritable extends ArrayWritable { 

    public TextArrayWritable() { 
     super(Text.class); 
    } 
} 

结帐ArrayWritable javadocs

+1

'ArrayWritable'实现'Writable'而不是'WritableComparable',显然后者是用于键的类所必需的。我可以继承'ArrayWritable'并添加对'WritableComparable'接口的支持,但这是必要的吗? – 2010-01-31 21:31:28

+0

对不起,看起来更接近。关键需要WritableComparable,因为hadoop需要能够对键进行排序。所以,是的,你可以实现WritableComparable接口,它只需要你重写compareTo方法。希望这可以帮助。 – 2010-01-31 21:51:52

相关问题