hadoop - 使用 cascalog 将同现计数转化为同现概率

标签 hadoop clojure cascalog

我有一个存储在 s3 上的同现计数表(其中每一行都是 [key-a, key-b, count]),我想从中生成同现概率矩阵。

为此,我需要计算每个键 a 的计数总和,然后将每行除以其键 a 的总和。

如果我“手动”执行此操作,我会传递数据以生成从键到总计的哈希表(在 leveldb 或类似的东西中),然后第二次传递数据以执行分配。这听起来不像是一种非常流氓的方式。

有什么方法可以通过执行相当于自连接的操作来获取一行的总计吗?

最佳答案

示例数据:

(def coocurrences
  [["foo" "bar" 3]
   ["bar" "foo" 3]
   ["foo" "quux" 6]
   ["quux" "foo" 6]
   ["bar" "quux" 2]
   ["quux" "bar" 2]])

查询:

(require '[cascalog.api :refer :all] '[cascalog.ops :as c])

(let [total (<- [?key-a ?sum]
              (coocurrences ?key-a _ ?c)
              (c/sum ?c :> ?sum))]
  (?<- (stdout) [?key-a ?key-b ?prob]
    (div ?c ?sum :> ?prob)
    (coocurrences ?key-a ?key-b ?c)
    (total ?key-a ?sum)))

输出:

RESULTS
-----------------------
bar     foo     0.6
bar     quux    0.4
foo     bar     0.3333333333333333
foo     quux    0.6666666666666666
quux    foo     0.75
quux    bar     0.25
-----------------------

关于hadoop - 使用 cascalog 将同现计数转化为同现概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628870/

相关文章:

hadoop - 我们可以在JDBC URL中使用多个配置单元服务器进行故障转移吗

hadoop - yarn 公平调度程序无法平均分配资源

java - 将 native JNI 共享库与 Clojure 库捆绑在一起

unit-testing - 在 midje 的背景下重用设置和拆卸

intellij-idea - 如何在 Cursive IDE 中启用彩虹括号?

clojure - Cascalog deffilterop 与纯 clojure

java - 在Windows上的Eclipse中配置Hadoop 2.6.0时出现问题

python - 无法访问 PySpark 中的 RowMatrix 方法 : columnSimilarities(), computeColumnSummaryStatistics()

clojure - 无法解析 Cascalog 中谓词中的符号

hadoop - Cascalog Hadoop 版本支持