加入需要两个地图的两个数据集和一个使用Hadoop减少的数据集

时间:2012-07-09 14:07:22

标签: java hadoop mapreduce

  

可能重复:
  Equivalent of mongo's out:reduce option in hadoop

我有2个数据集,一个是另一个的补充。它看起来像这样(不是实际字段):

Question
========
id(key)
name
description

Answer
========
id(key)
type
question_id

Output
======
question_id (key)
name
description
type_a_count
type_b_count

我想知道每个问题有多少个特定类型的答案。我曾经使用mongodb的map reduce引擎通过发出我的问题映射器的相同字段(但归零),除了type_count字段中的一个,只是在我的reducer中添加所有内容。 我现在遇到的问题是,当我运行Answer mapper时,问题映射器中的值会被答案映射器中的值覆盖。

我正在寻找相当于mongodb的{out:“reduce”}选项。

更多详情:

  • 我只使用mapper作为问题映射器
  • 两个作业的outputURI是相同的,因为我希望它合并
  • 我想使用问题映射器的输出和答案映射器的输出作为我的reducer的输入

1 个答案:

答案 0 :(得分:1)

这个答案可能是也可能不是你喜欢的。我知道你标记了java,但是有一个名为cascalog的库(用clojure编写)可以用来编写hadoop查询。这很简单:

$ lein repl
REPL started; server listening on localhost port 16309
myapp=> (use 'cascalog.playground)
nil
myapp=> (bootstrap)
nil
myapp=> (def questions [["1" "what?" "desc what"] ["2" "where?" "Desc where"]])
#'myapp/questions
myapp=> (def answers [["1" "a" "1"]["2" "a" "1"]["3" "a" "1"]["4" "b" "2"]])
#'myapp/answers
myapp=> (?<- (stdout) [?type ?name ?desc ?count] (questions ?qid ?name ?desc) (answers ?aid ?type ?qid) (c/count ?count))

RESULTS
-----------------------
a       what?   desc what   3
b       where?  Desc where  1

以下是了解cascalog的好地方:http://nathanmarz.com/blog/introducing-cascalog-a-clojure-based-query-language-for-hado.html