在clojure中更新vector的结果



我在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有两个参数-一个关联集合和一个位置。我怀疑这里你实际上想要conjassocconj都不会改变它所提供的集合——我们在这里使用的是不可变数据类型。

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

相关内容

最新更新