BatchScanExec是batch類的物理計劃,對應的邏輯計劃是DataSourceV2Relation,是Datasource。ide
它的入參是Scan類,Scan類有兩個重要方法,一個獲取分區列表信息;另外一個方法獲取讀取器工廠。spa
override lazy val partitions: Seq[InputPartition] = batch.planInputPartitions()對象
override lazy val readerFactory: PartitionReaderFactory = batch.createReaderFactory()input
override lazy val inputRDD: RDD[InternalRow] = {
new DataSourceRDD(sparkContext, partitions, readerFactory, supportsColumnar)
}it
planInputPartitions方法獲取分區列表;createReaderFactory獲取分區讀取者工廠,這二者決定一個DataSourceRDD來做爲inputRDD對象。spark
對於傳統的DataSource類,只要實現對應數據源的Scan子類就可使用了。io
而StreamingDataSourceV2Relation對應的物理計劃是MicroBatchScanExec和ContinuousScanExec,這時候Scan就不用了,而使用MicroBatchStream和ContinuousStream兩個流的定義類。方法