要映射函数agains它需要首先使用collect方法的RDD转换为数组类型的RDD的所有元素:在Spark Array上并行运行的Scala函数?
scala> val x = sc.parallelize(List(List("a"), List("b"), List("c", "d")))
x: org.apache.spark.rdd.RDD[List[String]] = ParallelCollectionRDD[1] at parallelize at <console>:12
scala> x.collect()
res0: Array[List[String]] = Array(List(a), List(b), List(c, d))
scala> x.flatMap(y => y)
res3: org.apache.spark.rdd.RDD[String] = FlatMappedRDD[3] at flatMap at <console>:15
都在阵列的所有操作例如上述类型“X”运行平行 ?
'x.collect()'返回一个Scala集合,但由于您没有将它分配给一个变量,它会被抛弃。 'x.flatMap(y => y)'将一个转换应用于'x'并返回一个新的RDD,但由于Spark中的转换是惰性的,因此这不会触发任何活动。针对RDD *的转换和操作*是并行运行的,但是如果您对'x.collect()'(普通数组)的输出执行'map()',则不会并行运行。 –