请写出flink统计总分的打包执行代码
时间: 2024-03-21 15:39:38 浏览: 22
以下是一个简单的 Flink 统计总分的打包执行代码示例:
```java
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
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 FlinkScoreCount {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> input = env.readTextFile("input.txt");
DataSet<Tuple2<String, Integer>> scores = input.flatMap(new FlatMapFunction<String, String>() {
@Override
public void flatMap(String value, Collector<String> out) {
String[] fields = value.split(",");
String name = fields[0].trim();
int score = Integer.parseInt(fields[1].trim());
out.collect(name + "," + score);
}
}).map(new MapFunction<String, Tuple2<String, Integer>>() {
@Override
public Tuple2<String, Integer> map(String value) {
String[] fields = value.split(",");
String name = fields[0].trim();
int score = Integer.parseInt(fields[1].trim());
return new Tuple2<>(name, score);
}
});
DataSet<Tuple2<String, Integer>> sumScores = scores.groupBy(0).sum(1);
sumScores.print();
env.execute("Flink Score Count");
}
}
```
上述代码中,我们读取了一个文本文件 `input.txt`,文件中每行包含一条记录,记录格式为 `姓名,分数`,例如:
```
张三,80
李四,90
王五,70
张三,85
李四,95
王五,75
```
接下来,我们通过 `flatMap` 和 `map` 操作将每行记录转换为一个元组 `(姓名, 分数)`。然后,我们对元组按照姓名进行分组,并使用 `sum` 函数对同一组内的分数进行求和。最后,我们将每个人的总分输出到控制台。
要运行代码,需要将上述代码保存为 `FlinkScoreCount.java` 并使用 Maven 进行打包。打包命令如下:
```
mvn clean package
```
打包完成后,在终端中进入 target 目录,执行以下命令运行 Flink 任务:
```
java -jar flink-score-count.jar
```
其中,`flink-score-count.jar` 是打包生成的文件名。执行完成后,总分统计结果将输出到控制台。