значения кортежа для ключа в scala rdd - PullRequest
3 голосов
/ 20 мая 2019

У меня есть rdd с парой ключ-значение в Scala. Я хочу сформировать rdd таким образом, чтобы оно было (key , tuple(values)).

Я пытался использовать карту, но не работал. Если бы это был pyspark, то я бы использовал map(lambda x : x[0] , list(x[1:]))

(a,1,2,3,4), (b,4,5,6),(c,1,3) до [a,(1,2,3,4)], [b,(4,5,6)], [c,(1,3)]

1 Ответ

4 голосов
/ 21 мая 2019

В Scala кортежи трудно обрабатывать универсальным образом (это изменится в Scala 3), поэтому самым простым решением для вас будет просто создать вспомогательный объект с перегруженной функцией:

object TupleUtil {   
  def splitHead[K,V](t: (K,V,V)): (K,(V,V)) = t._1 -> (t._2, t._3)
  def splitHead[K,V](t: (K,V,V,V)): (K,(V,V,V)) = t._1 -> (t._2, t._3, t._4)
  def splitHead[K,V](t: (K,V,V,V,V)): (K,(V,V,V,V)) = t._1 -> (t._2, t._3, t._4, t._5)
  //etc up to 22
}

Или, если вы можете использовать бесформенный, то вы можете просто сделать:

import shapeless.syntax.std.tuple._

(t.head, t.tail)

Чтобы использовать его, просто добавьте его к вашему build.sbt:

libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.3"
...