Sql (Scala)将Apache Spark中的字符串转换为日期

Sql (Scala)将Apache Spark中的字符串转换为日期,sql,scala,csv,apache-spark,Sql,Scala,Csv,Apache Spark,我想阅读带有Spark的.csv文件,并将这些列与管件类型相关联 val conf = new SparkConf() .setMaster("local[8]") .setAppName("Name") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) val customSchema = StructType(Array(

我想阅读带有Spark的.csv文件,并将这些列与管件类型相关联

    val conf = new SparkConf()
        .setMaster("local[8]")
        .setAppName("Name")

    val sc = new SparkContext(conf)

    val sqlContext = new SQLContext(sc)

    val customSchema = StructType(Array(
        StructField("date", DateType, true),
        StructField("time",StringType, true),
        StructField("am", DoubleType, true),
        StructField("hum", DoubleType, true),
        StructField("temp", DoubleType, true)
    ))

    val df = sqlContext.read
            .format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
            .option("header","true")
            .option("delimiter",";")
            .schema(customSchema)
            .load("data.csv")
我正在阅读的一行.csv文件如下所示

+----------+--------+-----+-----+-----+
|      date|    time|   am|  hum| temp|
+----------+--------+-----+-----+-----+
|04.10.2016|12:51:20|1.121|0.149|0.462|
+----------+--------+-----+-----+-----+
如果我将日期的类型设置为字符串,Spark将读取.csv并正确关联类型。如果我像上面显示的代码那样保留customSchema,Spark将由于错误的日期格式引发异常
(DateType将期望YYYY-MM-DD,而我的是DD.MM.YYYY)。

是否有方法将日期字符串重新格式化为YYYY-MM-DD,然后应用模式?或者我也可以通过添加参数来更改Spark给出的日期类型


提前感谢

使用
日期格式
选项:

val df = sqlContext.read
  .format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
  .option("header","true")
  .option("delimiter",";")
  .option("dateFormat", "dd.MM.yyyy")
  .schema(customSchema)
  .load("data.csv")

我建议以后再分析日期。另请参阅

以及:

另外,作为旁注,自spark 2.0以来,您仅使用spark会话对象,并使用编码器推断模式(而不是sc、sqlcontext等)。大概是这样的:

spark = SparkSession(...)
case class User(id:Int, city:String, loc:Array[Double], pop:Long, state:String)
val users = (spark.read.option("inferSchema","true").option("header","true").csv("data/users1.csv").as[User])

谢谢,成功了。您能告诉我DataFrameReader是否有可用选项的列表吗?我还没找到。
scala> date.format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))
res0: String = 2020.01.01
spark = SparkSession(...)
case class User(id:Int, city:String, loc:Array[Double], pop:Long, state:String)
val users = (spark.read.option("inferSchema","true").option("header","true").csv("data/users1.csv").as[User])