> 文章列表 > Flink-StreamingDemo-对源源不断输入的内容进行单词数量统计

Flink-StreamingDemo-对源源不断输入的内容进行单词数量统计

Flink-StreamingDemo-对源源不断输入的内容进行单词数量统计

首先我们要保证搭建了Flink程序环境

下面的代码对每次输入的内容进行统计,达到了这样一个需求效果:

1.输入一个词yc,那么我们将统计yc这个词出现的次数是1
2.如果再次输入yc,那么yc这个词出现的次数是2
3.输入一个词wh,将统计yc这个词出现的次数是1
4.输入yc,yc这个词出现的次数是3

首先创建一个单词类,一个该类的示例,表示某个单词出现的次数是多少次

public class WordOnce {/*表示输入的一个单词/private String word;/*表示这个单词出现的次数,默认是1,注意1表示当前值(累加),也就是说本次又出现了一次,至于之前* 已经出现过多少次,由flink赋值,反正我们自己new WordOnce()的时候,表示的是该单词又出现了* 一次,所以此处默认是1/private int times=1;@Overridepublic String toString() {return "WordWithCount{" +"word='" + word + '\\'' +", times=" + times +'}';}// 省略get/set方法,但是并不影响我认为lombok是垃圾
}

创建主程序,代码如下,运行下面的代码,同时cmd启动nc -lp命令,随便输入一些词,会看到控制台输出单词出现的次数

import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;public static void main(String[] args) throws Exception {final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();DataStreamSource<String> text = env.socketTextStream("localhost", 9000);DataStream<WordOnce> windowCounts = text.flatMap(new StreamingFlatFunction()).keyBy("word").sum("times");windowCounts.print().setParallelism(1);env.execute("Flink Streaming Java API Skeleton");}

附录:
NC输入的内容如下

C:\\Users\\admin>nc -lp 9000
yc
yc
wh
yc

控制台打印的结果如下

WordOnce{word='yc', times=1}
WordOnce{word='yc', times=2}
WordOnce{word='wh', times=1}
WordOnce{word='yc', times=3}

下一篇:Flink-Window

读书笔记