2015-09-17 3 views
2

В соответствии с искрой DAG визуализации есть groupBy выполняются на стадии 1, после groupBy выполняется на стадии 0. У меня есть только один groupBy в моем коде, и не ожидать какие-либо других преобразований Я делаю, чтобы получить groupBy.Посторонние группиЙ в искре DAG

Вот код (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 представляет собой последовательность textFile, map, groupBy и Stage 1 является map-values, map-values, flat-map, map, saveAsTextFile, но где происходит groupBy на этапе 1?

enter image description here

С groupBy вызывает перетасовать, который является вычислительно дорого и отнимает много времени, я не хочу посторонний один, если она может быть оказана помощь.

ответ

1

Здесь нет посторонней группы. groupBy - двухэтапный процесс. Первым шагом является локальный map, который преобразуется от x в (f(x), x). Это та часть, которая представлена ​​в виде блок-groupBy в стадии 0.

Второй шаг не является локальным groupByKey, который помечен как groupBy блок в стадии 1. Только эта часть требует перетасовки.

 Смежные вопросы

  • Нет связанных вопросов^_^