我想创建一个rdd,使每行都有一个索引。我尝试了以下
鉴于rdd:
["a" "b" "c"]
(defn make-row-index [input]
(let [{:keys [col]} input]
(swap! @rdd assoc :rdd (-> (:rdd xctx)
(f/map #(vector %1 %2 ) (range))))))
期望的输出:
(["a" 0] ["b" 1] ["c" 2])
我遇到了arity错误,因为f / map用作(f/map rdd fn)
想在apache spark中使用zipWithUniqueId()
,但是我对如何实现这一点感到迷茫,我无法在flambo中找到相同的功能。任何建议和帮助表示赞赏。
由于
答案 0 :(得分:1)
您只需使用zipWithIndex
拨打map
,然后拨打untuple
:
(def rdd (f/parallelize sc ["a" "b" "c"]))
(f/map (.zipWithIndex rdd) f/untuple)
您可以使用.zipWithUniqueId
完全相同的方式,但结果会与您的预期不同。 zipWithUniqueId
将生成对,但索引字段不会被订购。
也可以使用zip
,但据我所知,它无法使用无限范围。
(def idx (f/parallelize sc (range (f/count rdd))))
(f/map (.zip rdd idx) f/untuple)
每当你使用zip
时,你应该小心,但一般来说,如果涉及洗牌,RDD应被视为无序集合。