Ответ 1
Я думаю, что toDebugString
успокоит ваше любопытство.
scala> val data = sc.parallelize(List((1,2)))
data: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[8] at parallelize at <console>:21
scala> val joinedData = data join data
joinedData: org.apache.spark.rdd.RDD[(Int, (Int, Int))] = MapPartitionsRDD[11] at join at <console>:23
scala> joinedData.toDebugString
res4: String =
(8) MapPartitionsRDD[11] at join at <console>:23 []
| MapPartitionsRDD[10] at join at <console>:23 []
| CoGroupedRDD[9] at join at <console>:23 []
+-(8) ParallelCollectionRDD[8] at parallelize at <console>:21 []
+-(8) ParallelCollectionRDD[8] at parallelize at <console>:21 []
Каждое углубление является этапом, поэтому это должно выполняться как два этапа.
Кроме того, оптимизатор довольно приличный, однако я бы предложил использовать DataFrames
, если вы используете 1.3+, поскольку во многих случаях оптимизатор EVEN лучше:)