
- Apache Flink 教程
- Apache Flink - 首頁
- Apache Flink - 大資料平臺
- 批處理與即時處理
- Apache Flink - 簡介
- Apache Flink - 架構
- Apache Flink - 系統需求
- Apache Flink - 設定/安裝
- Apache Flink - API 概念
- Apache Flink - Table API 和 SQL
- 建立 Flink 應用
- Apache Flink - 執行 Flink 程式
- Apache Flink - 庫
- Apache Flink - 機器學習
- Apache Flink - 使用案例
- Apache Flink - Flink vs Spark vs Hadoop
- Apache Flink - 結論
- Apache Flink 資源
- Apache Flink - 快速指南
- Apache Flink - 有用資源
- Apache Flink - 討論
Apache Flink - API 概念
Flink 擁有豐富的 API,開發人員可以使用這些 API 對批處理和即時資料進行轉換。各種轉換包括對映、過濾、排序、連線、分組和聚合。Apache Flink 對分散式資料執行這些轉換。讓我們討論 Apache Flink 提供的不同 API。
Dataset API
Apache Flink 中的 Dataset API 用於對一段時間內的資料執行批處理操作。此 API 可用於 Java、Scala 和 Python。它可以對資料集應用各種轉換,例如過濾、對映、聚合、連線和分組。
資料集可以從本地檔案或從特定來源讀取檔案建立,結果資料可以寫入不同的接收器,例如分散式檔案或命令列終端。此 API 受 Java 和 Scala 程式語言的支援。
這是一個 Dataset API 的 Wordcount 程式:
public class WordCountProg { public static void main(String[] args) throws Exception { final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.fromElements( "Hello", "My Dataset API Flink Program"); DataSet<Tuple2<String, Integer>> wordCounts = text .flatMap(new LineSplitter()) .groupBy(0) .sum(1); wordCounts.print(); } public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String line, Collector<Tuple2<String, Integer>> out) { for (String word : line.split(" ")) { out.collect(new Tuple2<String, Integer>(word, 1)); } } } }
DataStream API
此 API 用於處理連續流資料。您可以對流資料執行各種操作,例如過濾、對映、視窗化、聚合。此資料流有各種來源,例如訊息佇列、檔案、套接字流,結果資料可以寫入不同的接收器,例如命令列終端。Java 和 Scala 程式語言都支援此 API。
這是一個 DataStream API 的流式 Wordcount 程式,其中您有連續的單詞計數流,資料在第二個視窗中分組。
import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.time.Time; import org.apache.flink.util.Collector; public class WindowWordCountProg { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<Tuple2<String, Integer>> dataStream = env .socketTextStream("localhost", 9999) .flatMap(new Splitter()) .keyBy(0) .timeWindow(Time.seconds(5)) .sum(1); dataStream.print(); env.execute("Streaming WordCount Example"); } public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception { for (String word: sentence.split(" ")) { out.collect(new Tuple2<String, Integer>(word, 1)); } } } }
廣告