Flink流处理计算每个repo的唯一问题

时间:2018-01-16 16:29:45

标签: git scala streaming apache-flink flink-streaming

我正在Scala与Flink合作,我正在努力获得每个回购的独特问题。我有一个像这样的元组的数据流:(repo_name,issue_id,event_time)。 如何获取每个repo_name的唯一issue_id的计数?我想我必须使用mapWithState,但我不确定如何使用它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

假设您希望在7天的翻滚时间窗口内处理事件。

// eventStream: stream of case classes of type GithubEvent 
eventStream
   // only look at IssuesEvent
  .filter(e => e.`type` == "IssuesEvent")
   // key by the name of the repository
  .keyBy("repo.name")
   // tumbling time window of a week
  .timeWindow(Time.days(7))
   // apply window function
  .apply { (key, _, vals, out: Collector[(String)]) =>
    var count = 0;
    for (_ <- vals) {
      count = count + 1;
    }
    out.collect(s"Repo name: $key Unique issues: $count")
  }

要计算每个存储库的唯一问题数量,我们需要查看IssuesEvents。我们通过存储库的名称键入。然后,我们应用一个窗口函数来返回一个表示唯一问题数的字符串。

参考文献: