大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
使用 DataSet API 处理有界数据流
无
2024-04-13 13:50:02
18
0
0
bigdata
### 使用 `DataSet API` 处理有界数据流 > Written by 黄俊仁,2024/04/13 这个程序是一个基于 Apache Flink DataSet API 的简单示例,展示了如何进行单词计数。它首先从一组静态字符串创建一个数据集,然后使用自定义的 `flatMap` 函数将文本分割成单词,并为每个单词生成一个包含单词及其出现次数(初始化为1)的元组。通过分组和求和操作,程序计算出每个单词在整个数据集中的总出现次数。 ```java package org.nbubigdata.flink; 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 BatchApi { public static void main(String[] args) throws Exception { ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); // 通过env.fromElements创建一个包含字符串元素的DataSet。这里的DataSet是一个字符串集合,是数据处理的源头 DataSet<String> text = env.fromElements("Flink api demo", "hello flink", "hello nbu", "nbu"); // 使用flatMap操作来分割每行文本为单词,并为每个单词计数,然后按单词分组并求和,来统计每个单词出现的次数 DataSet<Tuple2<String, Integer>> ds = text.flatMap(new LineSplitter()) .groupBy(0) // 按Tuple的第一个元素(单词)分组 .sum(1); // 对每个分组的第二个元素(计数)进行求和 // 打印结果到控制台。这是批处理作业的最后一个操作,用于输出结果 ds.print(); } // LineSplitter是一个自定义的FlatMapFunction,用于处理输入的DataSet中的每一个元素 static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { // 实现flatMap方法来处理每一行文本,将其分割为单词,并为每个单词生成一个tuple(单词, 1) @Override public void flatMap(String line, Collector<Tuple2<String, Integer>> collector) throws Exception { // 分割字符串line为单词数组 for (String word : line.split(" ")) { // 对于每个单词,收集一个tuple,其中包含单词和数字1,表示这个单词出现了一次 collector.collect(new Tuple2<>(word, 1)); } } } } ``` 运行上述程序,可以在控制台中观察到如下的输出信息。 
上一篇:
a16-TICK Stack
下一篇:
使用DataStream API处理无界数据流
文档导航