我正在使用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
),查询变得更快。
这可能的原因是什么?非常感谢!