我是 Java 和 Hadoop 的新手。我正在尝试一个非常简单的程序来获得频繁对。
例如
Input: My name is Foo. Foo is student.
Intermediate Output:
Map:
(my, name): 1
(name ,is): 1
(is, Foo): 2 // (is, Foo) = (Foo, is)
(is, student)
所以最后它应该给频繁的pair is (is ,Foo)
。
伪代码如下所示:
Map(Key: line_num, value: line)
words = split_words(line)
for each w in words:
for each neighbor x:
emit((w, x)), 1)
在这里,我的钥匙不是一个,而是一对。在浏览文档时,我读到对于每个新键,我们必须实现WritableComparable。
所以我对此感到困惑。如果有人可以解释这门课,那就太好了。不确定这是不是真的。然后我可以自己弄清楚如何做到这一点!
我不想要任何代码,既不映射器也不想要任何东西......只想了解这个 WritableComparable 做什么?WritableComparable 的哪个方法实际上比较了键?我可以看到 equals 和 compareTo,但我找不到任何解释。请不要代码!谢谢
编辑 1:在 compareTo 中,我为对 (a, b) = (b, a) 返回 0 但仍然不会使用相同的减速器,在 compareTo 方法中有什么方法可以将键 (b, a) 重置为 (a, b ) 或生成全新的密钥?
编辑 2:我不知道生成新密钥,但在 compareTo 更改逻辑中,它运行良好..!谢谢大家!