我正在Scala与Flink合作,我正在努力获得每个回购的独特问题。我有一个像这样的元组的数据流:(repo_name,issue_id,event_time)。
如何获取每个repo_name的唯一issue_id的计数?我想我必须使用mapWithState
,但我不确定如何使用它。
提前致谢。
答案 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。我们通过存储库的名称键入。然后,我们应用一个窗口函数来返回一个表示唯一问题数的字符串。
参考文献: