我使用 Spark 2.2.0
我正在阅读一个 csv 文件,如下所示:
val dataFrame = spark.read.option("inferSchema", "true")
.option("header", true)
.option("dateFormat", "yyyyMMdd")
.csv(pathToCSVFile)
此文件中有一个日期列,所有记录的值都等于
20171001
对于这个特定的列。问题是 spark 推断该列的类型是
integer
而不是 date
.当我删除 "inferSchema"
选项,该列的类型是 string
.没有
null
值,也没有此文件中任何格式错误的行。这个问题的原因/解决方案是什么?
最佳答案
如果我的理解正确,code意味着以下类型推断的顺序(首先检查第一个类型):
NullType
IntegerType
LongType
DecimalType
DoubleType
TimestampType
BooleanType
StringType
有了这个,我认为问题在于
20171001
匹配 IntegerType
在考虑之前 TimestampType
(它使用 timestampFormat
而不是 dateFormat
选项)。一种解决方案是定义模式并将其与
schema
一起使用。运算符(来自 DataFrameReader
)或让 Spark SQL 推断模式并使用 cast
运算符(operator)。如果字段数不高,我会选择前者。
关于apache-spark - 如何强制 CSV 的 inferSchema 将整数视为日期(使用 "dateFormat"选项)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46529404/