我使用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>
谢谢!
答案 0 :(得分:1)
代码中没有任何内容会改变column-values
绑定。我不确定flambo在这里的具体细节是如何工作的,但你应该看result
,而不是column-values
。
assoc
有两个参数 - 一个关联集合和一个位置。我怀疑你真的想要conj
。 assoc
或conj
都不会改变它提供的集合 - 我们在这里使用不可变数据类型。
我希望访问result
还没有您期望的答案,因为您希望assoc
在每次调用中建立一个值(与f/map
的结果不同) 。在这种情况下,您可能需要reduce
。