Twitter 使用Scala通过Flink时间窗口累积字数

Twitter 使用Scala通过Flink时间窗口累积字数,twitter,stream,apache-flink,Twitter,Stream,Apache Flink,我有推特流API,我正在从那里检索推特。 我也有一个我想要考虑的单词列表 我想做的是将最准确的值存储到我的Cassandra数据库中,该值对应于该单词在一天中的使用次数 我在考虑使用窗口函数每5秒合并一次结果,然后在数据库中写入这个合并值 我不知道这是不是最好的办法。 如果这是最好的方法,我试着在文档后面做一个简单的例子,但它没有每5秒对单词进行分组 val env = StreamExecutionEnvironment.getExecutionEnvironment va

我有推特流API,我正在从那里检索推特。
我也有一个我想要考虑的单词列表

我想做的是将最准确的值存储到我的Cassandra数据库中,该值对应于该单词在一天中的使用次数

我在考虑使用窗口函数每5秒合并一次结果,然后在数据库中写入这个合并值

我不知道这是不是最好的办法。 如果这是最好的方法,我试着在文档后面做一个简单的例子,但它没有每5秒对单词进行分组


    val env = StreamExecutionEnvironment.getExecutionEnvironment

    val counts =
      env.fromElements("foo bar test test baz foo", "yes no no yes", "hi hello hi hello")
      .flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
      .filter(word => Words.listOfWords.contains(word) || Words.listOfWords2.contains(word))
      .map { (_, 1) }
      .keyBy(0)
      .timeWindow(Time.seconds(5)).sum( 1)

    counts.print()
    env.execute("test-code")

  }

嗯,目前它不起作用,因为您正在从元素创建
数据流
,这不是窗口化的最佳方法,因为您实际上没有5秒钟的运行时间来创建多个窗口,所以所有消息都将转到同一个窗口。但是,如果你想在实际的Twitter API上运行它,通常应该将项目正确地分组到windows中。

5到5秒是什么意思?每5秒,我就更新一次问题;)好的,你能解释一下为什么你在
过滤器中两次检查相同的东西吗?输入错误,列表中搜索的东西不同,我已经更新了OK,我明白了。但最好是分组,然后将这个分组的值添加到数据库中的值,或者是更新数据库中的每个元素?我不知道你在问什么。但通常情况下,是为每个元素更新数据库,还是将窗口中的元素分组并在发出窗口时更新,取决于用例。通常,如果可以,我建议使用windows,因为这将大大减少数据库中的更新数量,从而提高总体性能。