Пользовательский интерфейс spark показывает три этапа, а toDebugString показывает три уровня отступа, даже если исходный RDD кэшируется.

У меня есть очень простая маленькая искровая программа, которую я использовал, чтобы лучше понять, как устанавливаются границы этапа:

import org.apache.spark.rdd.RDD
val sc = spark.sparkContext
val rdd1 = sc.parallelize(Seq(
                    ("math",    55),
                    ("math",    56),
                    ("english", 57),
                    ("english", 58),
                    ("science", 59),
                    ("science", 54)))
rdd1.cache()

val result = rdd1.join(rdd1)
result.collect()
result.toDebugString

Если я вызываю toDebugString на моем rdd, я вижу три уровня отступа:

scala>     result.toDebugString
res11: String =
(8) MapPartitionsRDD[19] at join at <console>:31 []
 |  MapPartitionsRDD[18] at join at <console>:31 []
 |  CoGroupedRDD[17] at join at <console>:31 []
 +-(8) ParallelCollectionRDD[16] at parallelize at <console>:31 []
 |  |      CachedPartitions: 8; MemorySize: 736.0 B; ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B
 +-(8) ParallelCollectionRDD[16] at parallelize at <console>:31 []
    |      CachedPartitions: 8; MemorySize: 736.0 B; ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B

Мне интересно, почему этот искровой фрагмент потребовал три этапа вместо двух. Я бы подумал, что мне нужно

  • один этап для подготовки ввода (который я использую дважды в соединении, но который кэшируется, поэтому я не понимаю, почему у меня есть два вхождения этапа ParallelCollectionRDD)
  • другая стадия, вызванная использованием соединения, которое вводит границу тасования.

Любое объяснение или разъяснение будет приветствоваться!

0 ответов

Другие вопросы по тегам