Как сгладить список внутри RDD?

Можно ли сгладить список внутри RDD? Например, convert:

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

в

 val yyy: org.apache.spark.rdd.RDD[Foo]

Как это сделать?

Ответ 1

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)

Ответ 2

Вам просто нужно сгладить его, но поскольку в RDD нет явного метода "сглаживания", вы можете сделать это:

rdd.flatMap(identity)

Ответ 3

Я согласен со всеми ответами, но вы можете рассмотреть метод + = > "flatten", если только не создать новую коллекцию из существующей коллекции. когда вы используете flatten, ваша коллекция остается неизменной.

rdd.flatten