我在clojure中使用flambo spark api函数开发了一个函数
(: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)))
然后我试着打印出column-values的值结果是
Col values: []
这是为什么呢?
我试着用下面的命令替换上面函数中的println:
(println "Result: " result)
,得到如下结果:
#<JavaRDD MapPartitionsRDD[16] at map at NativeMethodAccessorImpl.java:-2>
谢谢!
代码中没有任何内容改变column-values
绑定。我不确定flambo在这里是如何工作的,但你应该看看result
,而不是column-values
。
assoc
有两个参数-一个关联集合和一个位置。我怀疑这里你实际上想要conj
。assoc
和conj
都不会改变它所提供的集合——我们在这里使用的是不可变数据类型。
我希望访问result
还没有得到您期望的答案,因为您希望assoc
在每次调用中建立一个值(与f/map
的结果不同)。在本例中,您可能需要reduce
.