使用Hadoop连接需要两个映射和一个reduce的两个数据集



可能重复:
mongo';s out:hadoop 中的reduce选项

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

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映射程序时,问题映射程序中的值会被答案映射程序的值覆盖

我正在寻找mongodb的{out:"reduce"}选项

更多详细信息:

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

这个答案可能符合您的喜好,也可能不符合您的意愿。我知道你标记了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

以下是了解卡斯卡卢格的好起点:http://nathanmarz.com/blog/introducing-cascalog-a-clojure-based-query-language-for-hado.html.

最新更新