对于模棱两可的标题感到抱歉,但我在Twitter上引用他们内部系统TSAR上的博客文章,他们用它们对Thrift对象的流进行时间序列聚合。
我是Scala的新手所以我不明白他们的ImpressionJob的scala代码如何引用ImpressionAttributes Thrift对象中的各个字段。
他们给出的例子有Thrift定义:
enum Client
{
iPhone = 0,
Android = 1,
...
}
struct ImpressionAttributes
{
1: optional Client client,
2: optional i64 user_id,
3: optional i64 tweet_id
}
和TSAR工作(scala代码)
object ImpressionJob extends TsarJob[ImpressionAttributes] {
aggregate {
onKeys(
(TweetId),
(TweetId, ClientApplicationId)
) produce (
Count,
Unique(UserId)
) sinkTo (Manhattan, MySQL)
} fromProducer {
ClientEventSource(“client_events”)
.filter { event => isImpressionEvent(event) }
.map { event =>
val impr = ImpressionAttributes(
event.client, event.userId, event.tweetId
)
(event.timestamp, impr)
}
}
}
TweetId,ClientApplicationId和UserId在哪里定义。我知道他们引用了作业类中的字段,但不确定如何定义这些别名。博客文章暗示他们没有在其他地方定义。