Scala Spark:使用指定的日期格式读取csv

Scala Spark:使用指定的日期格式读取csv,scala,csv,apache-spark,Scala,Csv,Apache Spark,我需要读取一个特定日期格式的Spark csv文件。但最后我还是将date列解释为一般字符串,而不是date 输入csv文件: cat oo2.csv 约会什么的 2013.01.02,0 2013.03.21,0 使用Spark 3.1.1: import org.apache.spark.sql.SparkSession val spark:SparkSession=SparkSession.builder().master(“本地[*]”) .appName(“Hmmm”) .getOr

我需要读取一个特定日期格式的Spark csv文件。但最后我还是将
date
列解释为一般
字符串,而不是
date

输入csv文件:

cat oo2.csv
约会什么的
2013.01.02,0
2013.03.21,0
使用Spark 3.1.1:

import org.apache.spark.sql.SparkSession
val spark:SparkSession=SparkSession.builder().master(“本地[*]”)
.appName(“Hmmm”)
.getOrCreate()
val oo=spark.read。
选项(“标题”、“真”)。
选项(“推断模式”、“真”)。
选项(“日期格式”、“yyyy.MM.dd”)。
csv(“oo2.csv”)
oo.printSchema()
oo.show()
我得到:

root
 |-- date: string (nullable = true)
 |-- something: integer (nullable = true)
+----------+---------+
|      date|something|
+----------+---------+
|2013-01-02|        0|
|2013-03-21|        0|
+----------+---------+
我错过什么了吗?它应该是简单的,基本上类似的方法在中描述:但没有快乐

ps如果我试图解析Spark之外的日期

导入java.text.simpleDataFormat
val a=新的简化格式(“yyyy.MM.dd”)
a、 解析(“2013.01.02”)

它工作得非常好

Spark无法推断日期
类型。 有两种可能性:

  • 需要指定架构:
  • 解决方法如下:

  • 我们提出了在阅读过程中推断
    日期
    类型的要求。让我们看看开发人员社区将如何响应

    不,不需要指定模式(有
    选项(“推断模式”,“真”)
    要自动获取模式,除了
    日期
    列之外,这工作正常。这正是问题所在。
    推断模式
    无法推断日期类型列。hmmm-如果我看:-似乎可以使用日期格式。如果模式可以推断为
    整数
    为什么不能推断
    日期
    。这会很奇怪……为什么您认为
    InferSchema
    不能与
    date
    一起使用?是的,只要您指定一个架构,就可以使用dateFormat。这只是根据我的经验,您的问题也证实了InferSchema不能与dateFormat一起使用。@xhudik请参阅InferSchema的工作原理。。。
    val df = spark.read
                  .option("header",true)
                  .option("dateFormat","yyyy.MM.dd")
                  .schema("date date, something int")
                  .csv("oo2.csv")
    
    val oo = spark.read.
      option("header","true").
      //infer schema for other types
      option("inferSchema","true").
      csv("oo2.csv").
      //manually create a new column with date
      withColumn("new_date", to_date(col("date"),"yyyy.MM.dd."))