为什么将 schema 指定为 DateType / TimestampType 会使查询变得非常慢?

Why specifying schema to be DateType / TimestampType will make querying extremely slow?

我正在使用 spark-csv 1.1.0 和 Spark 1.5。我制作的架构如下:

private def makeSchema(tableColumns: List[SparkSQLFieldConfig]): StructType = {
    new StructType(
      tableColumns.map(p => p.ColumnDataType match {
        case FieldDataType.Integer => StructField(p.ColumnName, IntegerType, nullable = true)
        case FieldDataType.Decimal => StructField(p.ColumnName, FloatType, nullable = true)
        case FieldDataType.String => StructField(p.ColumnName, StringType, nullable = true)
        case FieldDataType.DateTime => StructField(p.ColumnName, TimestampType, nullable = true)
        case FieldDataType.Date => StructField(p.ColumnName, DateType, nullable = true)
        case FieldDataType.Boolean => StructField(p.ColumnName, BooleanType, nullable = false)
        case _ => StructField(p.ColumnName, StringType, nullable = true)
      }).toArray
    )
  }

但是当有 DateType 列时,我使用 Dataframes 的查询会很慢。 (查询只是简单的 groupby(), sum() 等等)

对于相同的数据集,在我注释掉将 Date 映射到 DateType 并将 DateTime 映射到 TimestampType(即映射到 StringType)的两行之后,查询变得更快。

这可能是什么原因?非常感谢!

我们已经找到了这个问题的可能答案。

当简单地指定一个列为DateTypeTimestampType时,spark-csv会尝试为该行的每一行解析日期及其所有内部格式,这使得解析进度慢得多。

从它的官方文档来看,我们似乎可以在选项中指定日期的格式。我想它可以使解析进度更快。