2015-11-02 6 views
0

Итак, у меня есть простая карта типа Map [Long,Int].Scala - groupВсе ключи от карты

Ключи на карте имеют временные метки типа (1446462630,1446462640,1446462650) являются ключами моей карты.

1446462630 = which is 11/02/2015 11:10:30(Epoch time in sceonds) 
1446462640 = which is 11/02/2015 11:10:40(..) 
1446462650 = which is 11/02/2015 11:10:50(..) 

Моя карта выглядит следующим образом

1446462630->2 
1446462640->1 
1446462650->3 

так что теперь я хочу, чтобы отобразить накопленный подсчет результата, сгруппированный по минуте между 11:10 и 11:11 так что моим выходом будет

1446462600 -> 6 

1446462600 (минута конвертирования 11/02/2015 11:10) Как я могу добиться этого? P.S я пытался myMap.groupBy{ _._1/(60)) не работает? Любые предложения о том, как реализовать это в scala?

Заранее благодарен.

ответ

4

Вы почти там:

myMap.groupBy{ _._1/(60)).map {case (sec, map) => sec -> map.values.sum} 

Также рассмотреть использование TimeUnit для преобразования. Для вашего дела:

TimeUnit.SECONDS.toMinutes(_._1) 
0

Вот такой же ответ, как у nyavro, но с фильтрами для вашего дела.

myMap.groupBy(_._1/60).filterKeys(key => 
    key >= 1446462600/60 && key <= 1446462600/60+60 
).map{ 
    case (k, v) => k*60 -> v.map(_._2).sum 
} 

res1: scala.collection.immutable.Map[Int,Int] = Map(1446462600 -> 6) 
+0

Большое спасибо, сейчас он отлично работает. Мне не хватало суммы значений после группировки. –

Смежные вопросы