scala rdd中的键的元组值

时间:2019-05-20 20:58:49

标签: scala apache-spark rdd

我在Scala中使用键值对rdd。我想以这样的方式形成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 个答案:

答案 0 :(得分:4)

在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"