Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala spark csv包中的推断模式_Scala_Apache Spark_Apache Spark Sql_Spark Csv - Fatal编程技术网

Scala spark 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

在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.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?