在 clojure 中更新向量的结果

Results of updating a vector in clojure

我在 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)))

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

 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 在每次调用中建立一个值(与 [=19= 的结果不同) ]).在这种情况下,您可能需要 reduce.