- 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));
}
}
}
}
广告