scala – spark-csv包中的inferSchema
当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. 我使用的是spark-csv软件包的最新版本(1.0.3) 我在这里错过了什么吗? 解决方法
二零一五年七月三十零日
最新版本实际上是1.1.0,但它看起来像inferSchema is not included in the latest release并不重要. 2015年8月17日 该软件包的最新版本现在为1.2.0(发布于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) 所以这真的不是一个严重的问题. 二〇一七年十二月二十○日: 内置的csv解析器可用,因为Spark 2.0支持日期和时间戳的模式推断 – 它使用两个选项: > timestampFormat,默认为yyyy-MM-dd’T’HH:mm:ss.SSSXXX 另见How to force inferSchema for CSV to consider integers as dates (with “dateFormat” option)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |