我正在使用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
)之后,查询变得多了更快。
可能的原因是什么?非常感谢你!
答案 0 :(得分:1)
我们找到了解决此问题的可能答案。
当简单地将列指定为DateType
或TimestampType
时,spark-csv将尝试使用行的每一行的所有内部格式来解析日期,这使得解析进度慢得多
从官方文档中,我们似乎可以在选项中指定日期的格式。我想它可以使解析进度更快。