twitter如何在Scala中实现TsarJob?

时间:2014-10-13 21:23:05

标签: scala

对于模棱两可的标题感到抱歉,但我在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在哪里定义。我知道他们引用了作业类中的字段,但不确定如何定义这些别名。博客文章暗示他们没有在其他地方定义。

0 个答案:

没有答案