Scala 如何在RDD中展平列表?

Scala 如何在RDD中展平列表?,scala,apache-spark,Scala,Apache Spark,是否可以在RDD中展平列表?例如,转换: val xxx: org.apache.spark.rdd.RDD[List[Foo]] 致: 如何做到这一点?您只需要将其展平,但由于RDD上没有明确的“展平”方法,您可以这样做: rdd.flatMap(identity) 您可以将RDD类附加到.flatten方法(以便遵循列表api): 这样就可以简单地使用: rdd.flatten 谢谢在这种情况下,什么是rdd,什么是identity?你的答案如何翻译成我问题中的一个例子?@zork问

是否可以在RDD中展平列表?例如,转换:

 val xxx: org.apache.spark.rdd.RDD[List[Foo]]
致:


如何做到这一点?

您只需要将其展平,但由于RDD上没有明确的“展平”方法,您可以这样做:

rdd.flatMap(identity)
您可以将
RDD
类附加到
.flatten
方法(以便遵循
列表
api):

这样就可以简单地使用:

rdd.flatten

谢谢在这种情况下,什么是
rdd
,什么是
identity
?你的答案如何翻译成我问题中的一个例子?@zork问题中的答案应该是
xxx.flatMap(identity)
identity
是一个预定义的函数,正如它所说的,identity函数。不过,你可能已经知道这一点了。
val rdd = sc.parallelize(Array(List(1,2,3), List(4,5,6), List(7,8,9), List(10, 11, 12)))
// org.apache.spark.rdd.RDD[List[Int]] = ParallelCollectionRDD ...

val rddi = rdd.flatMap(list => list)
// rddi: org.apache.spark.rdd.RDD[Int] = FlatMappedRDD ...

// which is same as rdd.flatMap(identity)
// identity is a method defined in Predef object.
//    def identity[A](x: A): A

rddi.collect()
// res2: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
object SparkHelper {
  implicit class SeqRDDExtensions[T: ClassTag](val rdd: RDD[Seq[T]]) {
    def flatten: RDD[T] = rdd.flatMap(identity)
  }
}
rdd.flatten