我在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)]
答案 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"