Scala spark csv包中的推断模式
在spark中将CSV读取为数据帧时,所有列都将读取为字符串。有没有办法得到列的实际类型 我有以下csv文件Scala spark csv包中的推断模式,scala,apache-spark,apache-spark-sql,spark-csv,Scala,Apache Spark,Apache Spark Sql,Spark Csv,在spark中将CSV读取为数据帧时,所有列都将读取为字符串。有没有办法得到列的实际类型 我有以下csv文件 Name,Department,years_of_experience,DOB Sam,Software,5,1990-10-10 Alex,Data Analytics,3,1992-10-10 我已经用下面的代码阅读了CSV val df = sqlContext. read. format("com.data
Name,Department,years_of_experience,DOB
Sam,Software,5,1990-10-10
Alex,Data Analytics,3,1992-10-10
我已经用下面的代码阅读了CSV
val df = sqlContext.
read.
format("com.databricks.spark.csv").
option("header", "true").
option("inferSchema", "true").
load(sampleAdDataS3Location)
df.schema
所有列都被读取为字符串。我希望“经验的年数”列读作int,而“DOB”列读作date
请注意,我已将选项inferSchema设置为true
我使用的是spark csv软件包的最新版本(1.0.3)
我错过了什么吗?2015-07-30 最新版本实际上是,但这并不重要,因为它看起来像
inferSchema
2015-08-17
该软件包的最新版本现已发布(发布日期为2015-08-06),模式推理工作如预期:
scala> df.printSchema
root
|-- Name: string (nullable = true)
|-- Department: string (nullable = true)
|-- years_of_experience: integer (nullable = true)
|-- DOB: string (nullable = true)
关于自动日期解析,我怀疑它是否会发生,或者至少在不提供额外元数据的情况下不会发生
即使所有字段都遵循类似日期的格式,也不可能确定给定字段是否应解释为日期。因此,要么是缺少自动日期推断,要么是电子表格般的混乱。更不用说时区之类的问题了
最后,您可以轻松地手动解析日期字符串:
sqlContext
.sql("SELECT *, DATE(dob) as dob_d FROM df")
.drop("DOB")
.printSchema
root
|-- Name: string (nullable = true)
|-- Department: string (nullable = true)
|-- years_of_experience: integer (nullable = true)
|-- dob_d: date (nullable = true)
所以这真的不是一个严肃的问题
2017-12-20:
内置csv解析器,因为Spark 2.0支持日期和时间戳的模式推断-它使用两个选项:
默认值为timestampFormat
yyyy-MM-dd'T:MM:ss.SSSXXX
带有默认值dateFormat
yyyy-MM-dd
另请参见很好的解释,但是否可以将任何字段设置为null=false?