[英]Flink DataSet program runs several jobs
我在Apache Flink中有以下代碼。 當我執行它時,我的代碼的某些部分運行兩次。 有人可以告訴我為什么會這樣嗎?
DataSet input1 = ...
DataSet input2 = ...
List mappedInput1 = input1
.map(...)
.collect();
DataSet data = input1
.union(input1.filter(...))
.mapPartition(...);
data = data.union(data2).distinct();
data.flatMap(new MapFunc1(data.collect()));
data
.flatMap(new MapFunc2(input2.collect()))
.groupBy(0)
.sum(1)
.print();
每個collect()
和print()
語句都會急切地觸發執行並將結果提取到客戶端代碼。 每個這樣的調用都會將整個程序追溯到數據源。
您的代碼包含三個collect()
和一個print()
語句。 因此,提交並執行了四個單獨的程序。 您應該查看廣播變量 ,而不是使用collect()
。 廣播變量將DataSet分發給運算符的每個並行實例。 計算和分發在同一程序中進行,不通過客戶端程序進行路由。 而是在運行運營商的工作人員之間直接交換數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.