在 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
接受两个参数——一个关联集合和一个位置。我怀疑这里你真的想要conj
。 assoc
或 conj
都不会改变它提供的集合 - 我们在这里使用不可变数据类型。
我希望访问 result
不会得到您期望的答案,因为您希望 assoc
在每次调用中建立一个值(与 [=19= 的结果不同) ]).在这种情况下,您可能需要 reduce
.
我在 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
接受两个参数——一个关联集合和一个位置。我怀疑这里你真的想要conj
。 assoc
或 conj
都不会改变它提供的集合 - 我们在这里使用不可变数据类型。
我希望访问 result
不会得到您期望的答案,因为您希望 assoc
在每次调用中建立一个值(与 [=19= 的结果不同) ]).在这种情况下,您可能需要 reduce
.