【发布时间】:2015-07-29 21:11:15
【问题描述】:
我有一个 clojure 函数,它使用 flambo v0.60 函数 api 对样本数据集进行一些分析。我注意到,当我使用 (get rdd 2) 而不是获取 rdd 集合中的第二个元素时,它获取的是 rdd 集合的第一个元素的第二个字符。我的假设是 clojure 将 rdd 集合的每一行视为一个完整的字符串,而不是一个向量,以便我能够获取集合中的第二个元素。我正在考虑使用 map-values 函数将映射值转换为可以获取第二个元素的向量,我尝试了这个:
(defn split-on-tab-transformation [xctx input]
(assoc xctx :rdd (-> (:rdd xctx)
(spark/map (spark/fn [row] (s/split row #"\t")))
(spark/map-values vec))))
不幸的是,我收到了一个错误:
java.lang.IllegalArgumentException: No matching method found: mapValues for class org.apache.spark.api.java.JavaRDD...
这是代码返回 rdd 中的第一个集合:
(假设我删除了上述函数中的(spark/map-values vec)
(defn get-distinct-column-val
"input = {:col val}"
[ xctx input ]
(let [rdds (-> (:rdd xctx)
(f/map (f/fn [row] row))
f/first)]
(clojure.pprint/pprint rdds)))
输出:
[2.00000 770127 200939.000000 \t6094\tBENTONVILLE, AR DPS\t22.500000\t5.000000\t2.500000\t5.000000\t0.000000\t0.000000\t0.000000\t0.000000\t0.000000\t1\tStore Tab\t0.000000\t4.50\t3.83\t5.00\t0.000000\t0.000000\t0.000000\t0.000000\t19.150000]
如果我尝试获取第二个元素770127
(defn get-distinct-column-val
"input = {:col val}"
[ xctx input ]
(let [rdds (-> (:rdd xctx)
(f/map (f/fn [row] row))
f/first)]
(clojure.pprint/pprint (get rdds 1)))
我明白了:
[\.]
Flambo documentation for map-values
我是 clojure 的新手,如果有任何帮助,我将不胜感激。谢谢
【问题讨论】:
-
@noisesmith 你能帮我解决这个挑战吗
-
@cbbetz 你能帮我解决这个 flambo 和 clojure 问题吗
标签: clojure apache-spark rdd flambo