val score = (_:Data) match {
  case x:YahooData => if (x.delta._2 < 0) -1 else 1
  case x:TwitterData => if (x.sentiments.map(_.score).sum < 0) -1 else 1
}

val computed[DStream[(Int, (Int, Int))]] = both
                  .map(x => (x.stock, List(x)))
                  .reduceByKeyAndWindow(_ ::: _, Seconds(60))
                  .mapValues(xs => (xs.map(score).sum, xs.foldLeft((0,0)) {
                    case ((y,t), x:YahooData) => (y+1,t)
                    case ((y,t), x:TwitterData) => (y,t+1)
                  }))