可能重复:
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.