Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure spark-DAG中的无关groupBy_Clojure_Apache Spark_Flambo - Fatal编程技术网

Clojure spark-DAG中的无关groupBy

Clojure spark-DAG中的无关groupBy,clojure,apache-spark,flambo,Clojure,Apache Spark,Flambo,根据spark DAG可视化,在第0阶段执行groupBy之后,在第1阶段执行groupBy。我的代码中只有一个groupBy,我不希望我正在进行的任何其他转换会产生groupBy 下面是代码(clojure/flambo): 我很清楚,第0阶段是序列textFile,map,groupBy,第1阶段是map value,map value,平面图,map,saveAsTextFile,但是第1阶段中的groupBy来自哪里 由于groupBy会导致一次洗牌,这在计算上既昂贵又耗时,如果可以帮

根据spark DAG可视化,在第0阶段执行
groupBy
之后,在第1阶段执行
groupBy
。我的代码中只有一个
groupBy
,我不希望我正在进行的任何其他转换会产生
groupBy

下面是代码(
clojure
/
flambo
):

我很清楚,第0阶段是序列
textFile
map
groupBy
,第1阶段是
map value
map value
平面图
map
saveAsTextFile
,但是第1阶段中的
groupBy
来自哪里


由于
groupBy
会导致一次洗牌,这在计算上既昂贵又耗时,如果可以帮助的话,我不想要一次无关的洗牌。

这里没有无关的groupBy<代码>分组方式是一个分两步的过程。第一步是本地
映射
,它从
x
转换为
(f(x),x)
。这是在阶段0中表示为
groupBy
块的部分

第二步是非本地
groupByKey
,它在阶段1中标记为
groupBy
块。只有这一部分需要洗牌

;; 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)))