spark-csv 包中的 inferSchema
inferSchema in spark-csv package
当 CSV 在 spark 中被读取为数据帧时,所有列都被读取为字符串。有没有办法得到列的实际类型?
我有以下 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.databricks.spark.csv").
option("header", "true").
option("inferSchema", "true").
load(sampleAdDataS3Location)
df.schema
所有列都被读取为字符串。我希望列 years_of_experience 被读作 int 和 DOB 被读作日期
请注意,我已将选项 inferSchema 设置为 true。
我使用的是最新版本 (1.0.3) 的 spark-csv 包
我是不是漏掉了什么?
2015-07-30
最新版本居然是1.1.0, but it doesn't really matter since it looks like inferSchema
is not included in the latest release。
2015-08-17
包的最新版本现在是 1.2.0(发布于 2015 年 8 月 6 日)并且模式推断按预期工作:
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'HH:mm:ss.SSSXXX
dateFormat
默认为 yyyy-MM-dd
另见
当 CSV 在 spark 中被读取为数据帧时,所有列都被读取为字符串。有没有办法得到列的实际类型?
我有以下 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.databricks.spark.csv").
option("header", "true").
option("inferSchema", "true").
load(sampleAdDataS3Location)
df.schema
所有列都被读取为字符串。我希望列 years_of_experience 被读作 int 和 DOB 被读作日期
请注意,我已将选项 inferSchema 设置为 true。
我使用的是最新版本 (1.0.3) 的 spark-csv 包
我是不是漏掉了什么?
2015-07-30
最新版本居然是1.1.0, but it doesn't really matter since it looks like inferSchema
is not included in the latest release。
2015-08-17
包的最新版本现在是 1.2.0(发布于 2015 年 8 月 6 日)并且模式推断按预期工作:
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'HH:mm:ss.SSSXXX
dateFormat
默认为yyyy-MM-dd
另见