1

我正在使用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 toDateType和 DateTime to映射到的两行之后TimestampType(即,将它们映射到StringType),查询变得更快。

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

4

1 回答 1

1

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

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

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

于 2016-03-07T04:55:51.257 回答