在clojure中更新矢量的结果

时间:2015-07-28 12:14:16

标签: clojure apache-spark flambo

我使用flambo spark api函数在clojure中开发了一个函数

(:require [flambo.api :as f]
          [clojure.string :as s])

(defn get-distinct-column-val
 "input = {:col val}"
 [ xctx input ]
 (let [{:keys [ col ]} input
       column-values []
       result (f/map (:rdd xctx) (f/fn [row]
                                   (if (s/blank? (get row col))
                                       nil
                                       (assoc column-values (get row col)))))]
   (println "Col values: " column-values)
   (distinct column-values)))

我尝试打印出列值的值,然后我

 Col values:  []

有什么理由说明为什么会这样吗?

我尝试用以下方法替换上述函数中的println:

(println "Result: " result)

并得到以下内容:

 #<JavaRDD MapPartitionsRDD[16] at map at NativeMethodAccessorImpl.java:-2>

谢谢!

1 个答案:

答案 0 :(得分:1)

代码中没有任何内容会改变column-values绑定。我不确定flambo在这里的具体细节是如何工作的,但你应该看result,而不是column-values

assoc有两个参数 - 一个关联集合和一个位置。我怀疑你真的想要conjassocconj都不会改变它提供的集合 - 我们在这里使用不可变数据类型。

我希望访问result还没有您期望的答案,因为您希望assoc在每次调用中建立一个值(与f/map的结果不同) 。在这种情况下,您可能需要reduce