2016-07-31 2 views
-2

У меня есть RDD (идентификатор сеанса, время начала сеанса, длина сеанса). Мне нужно уменьшить это RDD с помощью идентификатора сеанса, но затем сгенерировать массив соответствующих начальных времен и длительности сеанса, как Что ж. Может ли кто-нибудь указать мне, как написать код в scala?восстановление RDD в искровой scala

поэтому мне нужно преобразовать из RDD [(идентификатор сеанса, начала сеанса времени, длины сеанса)] к RDD [(идентификатор сеанса, Seq [(начала сеанса времени, длина сеанса)]) как я могу сделай это?

ответ

-1

Может groupBy может помочь (хотя это не очень рекомендуется, так как это может быть медленным):

val a = sc.parallelize(Seq(("a", 0, 0), ("b", 1, 1), ("a", 2, 2))) 
val grouped = a.groupBy{ case(sessionID, startTime, length) => sessionID } 

В этом случае grouped будет RDD[(String, Iterable[(String, Int, Int)]. Затем вы можете легко отобразить его, чтобы получить желаемый формат.

В качестве альтернативы, вы могли бы использовать map + groupByKey:

val grouped = a.map { 
    case(sessionID, startTime, length) => (sessionID, (startTime, length)) 
}.groupByKey