首页 > 解决方案 > IntelliJ 中 Flink WordCount 输出中的数字

问题描述

我正在学习 Apache Flink,并通过 IntelliJ 中的 Maven 集成它。我从 GitHub 尝试了这个 WordCount 示例:来自 GitHub 的 WordCount 示例

我只是调整了输入文本。

产生输出的代码的主要部分是:

DataStream<Tuple2<String, Integer>> counts =
                // split up the lines in pairs (2-tuples) containing: (word,1)
                text.flatMap(new Tokenizer())
                        // group by the tuple field "0" and sum up tuple field "1"
                        .keyBy(value -> value.f0)
                        .sum(1);

        // emit result
        if (params.has("output")) {
            counts.writeAsText(params.get("output"));
        } else {
            System.out.println("Printing result to stdout. Use --output to specify output path.");
            counts.print();
        }
        // execute program
        env.execute("Streaming WordCount");

我在 IntelliJ 中得到以下输出

4> (name,1)
4> (years,1)
3> (hello,1)
3> (twice,1)
5> (the,1)
2> (i,1)
6> (my,1)
2> (am,1)
6> (florian,1)
7> (old,1)
2> (thirteen,1)
6> (word,1)
8> (is,1)
8> (is,2)
6> (florian,2)
6> (written,1)

所以我有两个问题:

  1. “$NUMBER>”符号代表什么?这些是我的 Apache Flink 集群的工作人员的 ID 吗?哪一行代码执行此操作以及如何在输出中摆脱它们?在文档中找不到它。

  2. 与文本一样,“florian”一词在输出中出现了两次。这是由于子任务被写入输出吗?所以每次增加一个字数,新的字数就会写入输出?是否可以聚合这些,以便只写入最终计数?

我知道这些是非常基本的问题,但我对 Apache Flink 以及一般的分布式处理框架也是新手,但我热衷于学习它。所以提前谢谢!:)

标签: javaapache-flinkflink-streaming

解决方案


WordCoiunt 是流媒体空间中的“hello world”。

  1. NUMBER 显示重复次数
  2. “florian”在您的输入中出现两次,第一次显示为 (florian,1),第二次出现在 (florian,2) 如果您在输入中添加另一个“florian” flink 将计数并显示 (florian,3)

推荐阅读