ExternalRDD - это логическое представление DataFrame / Dataset (но не во всех случаях) в плане выполнения запроса, т.е. в DAG, созданной искрой.
ExternalRDD (s) создаются
- при создании DataFrame из RDD (, то есть с использованием createDataFrame (), toDF () )
- при создании DataSet из RDD (, то есть с использованием createDataSet (), toDS () )
Во время выполнения, когда ExternalRDD должен быть загружен в память,выполняется операция сканирования, которая представлена ExternalRDDScan (внутренне стратегия сканирования разрешена в ExternalRDDScanExec). Посмотрите на пример ниже:
scala> val sampleRDD = sc.parallelize(Seq(1,2,3,4,5))
sampleRDD: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> sampleRDD.toDF.queryExecution
res0: org.apache.spark.sql.execution.QueryExecution =
== Parsed Logical Plan ==
SerializeFromObject [input[0, int, false] AS value#2]
+- ExternalRDD [obj#1]
== Analyzed Logical Plan ==
value: int
SerializeFromObject [input[0, int, false] AS value#2]
+- ExternalRDD [obj#1]
== Optimized Logical Plan ==
SerializeFromObject [input[0, int, false] AS value#2]
+- ExternalRDD [obj#1]
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#2]
+- Scan[obj#1]
Вы можете видеть, что в плане выполнения запроса объект DataFrame представлен ExternalRDD, а физический план содержит операцию сканирования , котораяразрешается к ExternalRDDScan (ExternalRDDScanExec) во время его выполнения.
То же самое относится и к набору искровых данных.
scala> val sampleRDD = sc.parallelize(Seq(1,2,3,4,5))
sampleRDD: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> sampleRDD.toDS.queryExecution.logical
res9: org.apache.spark.sql.catalyst.plans.logical.LogicalPlan =
SerializeFromObject [input[0, int, false] AS value#23]
+- ExternalRDD [obj#22]
scala> spark.createDataset(sampleRDD).queryExecution.logical
res18: org.apache.spark.sql.catalyst.plans.logical.LogicalPlan =
SerializeFromObject [input[0, int, false] AS value#39]
+- ExternalRDD [obj#38]
Приведенные выше примеры былизапустить в версии 2.4.2
Ссылка: https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-LogicalPlan-ExternalRDD.html