0
点赞
收藏
分享

微信扫一扫

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

Sikj_6590 2023-04-08 阅读 62


首先我们要保证搭建了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;
    @Override
    public 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


举报

相关推荐

C++:单词数量、长度统计

0 条评论