【发布时间】:2015-08-25 14:49:06
【问题描述】:
我在 clojure 中开发了一个函数来从最后一个非空值填充一个空列,我假设这是可行的,给定
(:require [flambo.api :as f])
(defn replicate-val
[ rdd input ]
(let [{:keys [ col ]} input
result (reductions (fn [a b]
(if (empty? (nth b col))
(assoc b col (nth a col))
b)) rdd )]
(println "Result type is: "(type result))))
知道了:
;=> "Result type is: clojure.lang.LazySeq"
问题是如何使用 flambo(火花包装器)将其转换回 JavaRDD 类型
我在let表单中尝试(f/map result #(.toJavaRDD %))尝试转换为JavaRDD类型
我收到了这个错误
"No matching method found: map for class clojure.lang.LazySeq"
这是预期的,因为结果的类型是clojure.lang.LazySeq
问题是如何进行这种转换,或者如何重构代码以适应这种情况。
这是一个示例输入 rdd:
(type rdd) ;=> "org.apache.spark.api.java.JavaRDD"
但看起来像:
[["04" "2" "3"] ["04" "" "5"] ["5" "16" ""] ["07" "" "36"] ["07" "" "34"] ["07" "25" "34"]]
需要的输出是:
[["04" "2" "3"] ["04" "2" "5"] ["5" "16" ""] ["07" "16" "36"] ["07" "16" "34"] ["07" "25" "34"]]
谢谢。
【问题讨论】:
标签: java clojure apache-spark clojure-java-interop flambo