flink java 示例
时间: 2025-01-11 13:42:37 浏览: 57
### Flink Java 示例代码及教程
#### Maven 依赖配置
为了在项目中使用 Apache Flink 和 Java 进行开发,需要先设置项目的 Maven 依赖。以下是创建基于 Flink 的 Java 应用程序所需的 POM 文件中的部分配置[^1]:
```xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-java -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java_2.12 -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>${flink.version}</version>
</dependency>
<!-- Add other dependencies as needed -->
</dependencies>
```
#### WordCount 实现案例
WordCount 是学习分布式计算框架的经典入门例子之一,在这里提供了一个简单的批处理版本的 WordCount 程序作为参考[^2]:
```java
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
public class BatchWordCount {
public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.readTextFile("src/main/resources/input/word.txt");
DataSet<Tuple2<String, Integer>> counts =
text.flatMap(new Tokenizer())
.groupBy(0)
.sum(1);
counts.writeAsCsv("output", "\n", " ");
env.execute("Batch Word Count Example");
}
public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
String[] tokens = value.toLowerCase().split("\\W+");
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new Tuple2<>(token, 1));
}
}
}
}
}
```
此段代码展示了如何利用 `ExecutionEnvironment` 来定义执行环境,并通过调用 `readTextFile()` 方法加载文件内容形成数据集;接着应用自定义函数 `Tokenizer` 对每条记录做分割统计操作。
#### 使用Lambda表达式的改进版FlatMap方法
除了传统的匿名内部类形式外,还可以采用更简洁优雅的方式——即Java8引入的Lambda表达式来简化上述flatMap逻辑:
```java
DataSet<Tuple2<String, Integer>> wordCounts = text.flatMap((String line, Collector<Tuple2<String, Integer>> out) -> {
Arrays.stream(line.split("\\W+"))
.filter(word -> !word.isEmpty())
.forEach(word -> out.collect(Tuple2.of(word, 1)));
});
```
这段代码实现了相同的功能但是更加紧凑易读。
阅读全文
相关推荐


















