外来的群体在火花DAG中

时间:2015-09-17 16:30:49

标签: clojure apache-spark flambo

根据spark DAG vizualization,在阶段0中执行groupBy后,在阶段1中执行了groupBy。我的代码中只有一个groupBy并且不会'期待我正在进行的任何其他转换,以产生groupBy

以下是代码(clojure / flambo):

;; stage 0
(-> (.textFile sc path 8192)
    (f/map (f/fn [msg] (json/parse-string msg true)))
    (f/group-by (f/fn [msg] (:mmsi msg)) 8192)

;; stage 1
    (f/map-values (f/fn [values] (sort-by :timestamp (vec values))))
    (f/flat-map (ft/key-val-fn (f/fn [mmsi messages]
                                 (let [state-map (atom {}) draught-map (atom {})]
                                   (map #(mk-line % state-map draught-map) (vec messages))))))
  (f/map (f/fn [line] (json/generate-string line)))
  (f/save-as-text-file path)))

我很清楚,第0阶段是序列textFilemapgroupBy,第1阶段是map-valuesmap-values,{{1} },flat-mapmap,但第1阶段的saveAsTextFile来自哪里?

enter image description here

由于groupBy引起了一次计算成本高且耗时的洗牌,如果可以帮助的话我不想要一个无关的。

1 个答案:

答案 0 :(得分:1)

这里没有无关的群体。 groupBy分为两个步骤。第一步是本地map,它从x转换为(f(x), x)。这是在阶段0中表示为groupBy块的部分。

第二步是非本地groupByKey,在第1阶段标记为groupBy块。只有这部分需要改组。