Flink開發_Flink中的函式介面
阿新 • • 發佈:2020-12-02
Flink 函式:
org.apache.flink.api.common.functions
group
reduce
combine
1.轉換Transformation
public interface FilterFunction<T> extends Function, Serializable { boolean filter(T var1) throws Exception; } public interface MapFunction<T, O> extends Function, Serializable { O map(T var1) throws Exception; } public interface FlatMapFunction<T, O> extends Function, Serializable { void flatMap(T var1, Collector<O> var2) throws Exception; }
2.聚合
Flink在reduce之前大量使用了Combine操作。 Combine可以理解為是在map端的reduce的操作,對單個map任務的輸出結果資料進行合併的操作 combine是對一個map的 map函式操作所產生的鍵值對會作為combine函式的輸入, 經combine函式處理後再送到reduce函式進行處理, 減少了寫入磁碟的資料量,同時也減少了網路中鍵值對的傳輸量 --------------------------------------------------------------- public interface CombineFunction<IN, OUT> extends Function, Serializable { OUT combine(Iterable<IN> var1) throws Exception; } public interface ReduceFunction<T> extends Function, Serializable { T reduce(T var1, T var2) throws Exception; } public interface AggregateFunction<IN, ACC, OUT> extends Function, Serializable { ACC createAccumulator(); ACC add(IN var1, ACC var2); ACC merge(ACC var1, ACC var2); OUT getResult(ACC var1); } ----------------------------------------------------------------------
3.關聯
--Join操作DataStream時只能用在window中,和cogroup操作一樣 ------關聯---------這種 JoinFunction 和 FlatJoinFunction 與 MapFunction 和 FlatMapFunction 的關係類似------------ public interface JoinFunction<IN1, IN2, OUT> extends Function, Serializable { OUT join(IN1 var1, IN2 var2) throws Exception; } public interface FlatJoinFunction<IN1, IN2, OUT> extends Function, Serializable { void join(IN1 var1, IN2 var2, Collector<OUT> var3) throws Exception; } public interface CrossFunction<IN1, IN2, OUT> extends Function, Serializable { OUT cross(IN1 var1, IN2 var2) throws Exception; } -- CoGroup 兩個資料流/集合按照key進行group,然後將相同key的資料進行處理, --- 但是它和join操作稍有區別,它在一個流/資料集中沒有找到與另一個匹配的資料還是會輸出。 -- 如果是 DataStream中 則需要在window中使用 --- 如果在Dataser中 public interface CoGroupFunction<IN1, IN2, O> extends Function, Serializable { void coGroup(Iterable<IN1> var1, Iterable<IN2> var2, Collector<O> var3) throws Exception; }
4.分組
-- 分組reduce,即 GroupReduce GroupReduceFunction
-- 這與Reduce的區別在於使用者定義的函式會立即獲得整個組。在組的所有元素上使用Iterable呼叫該函式,
並且可以返回任意數量的結果元素
public interface GroupReduceFunction<T, O> extends Function, Serializable {
void reduce(Iterable<T> var1, Collector<O> var2) throws Exception;
}
-- 使group-reduce函式可組合,它必須實現GroupCombineFunction介面
-- GroupCombine轉換是可組合GroupReduceFunction中組合步驟的通用形式。
它在某種意義上被概括為允許將輸入型別I組合到任意輸出型別O.
-- 相反,GroupReduce中的組合步驟僅允許從輸入型別I到輸出型別I的組合。
這是因為reduce步驟中, GroupReduceFunction 期望輸入型別為I.
public interface GroupCombineFunction<IN, OUT> extends Function, Serializable {
void combine(Iterable<IN> var1, Collector<OUT> var2) throws Exception;
}
5.分割槽
-----------------------------------------------
public interface Partitioner<K> extends Serializable, Function {
int partition(K var1, int var2);
}
public interface MapPartitionFunction<T, O> extends Function, Serializable {
void mapPartition(Iterable<T> var1, Collector<O> var2) throws Exception;
}
6.其他
其他
Spark SQL UDAF與Flink的 aggreagte介面
Spark SQL的UDAF UserDefinedAggregateFunction
inputSchema bufferSchema dataType
initialize update merge evaluate
Flink:
interface AggregateFunction
<IN, ACC, OUT>
createAccumulator, add,merge;getResult;
}