Spark的createDataFrame函数是通过函数到底是通过rdd[row]中的一条数据的schema来创建的data frame,还是怎么来创建的?比如说如果rdd[row]中每行的schema不完全相同,用rdd来createDataFrame会发生什么?我看了看源码也没弄明白这个问题:

/**
* Creates a `DataFrame` from an RDD[Row].
* User can specify whether the input rows should be converted to Catalyst rows.
*/
private[sql] def createDataFrame(
    rowRDD: RDD[Row],
    schema: StructType,
    needsConversion: Boolean) = {
  // TODO: use MutableProjection when rowRDD is another DataFrame and the applied
  // schema differs from the existing schema on any field data type.
  val catalystRows = if (needsConversion) {
    val encoder = RowEncoder(schema)
    rowRDD.map(encoder.toRow)
  } else {
    rowRDD.map{r: Row => InternalRow.fromSeq(r.toSeq)}
  }
  val logicalPlan = LogicalRDD(schema.toAttributes, catalystRows)(self)
  Dataset.ofRows(self, logicalPlan)
}

另外创建出来的data frame是带数据的data frame,还是只有一个data frame?


不存在你说的RDD[row]里每行schema不完全相同的情况。

RDD 和 DF 都是抽象的概念,不持有数据

如果是rdd的话,不会每行的schema不同吧,schema是针对rdd整个的