Sql (Scala)将Apache Spark中的字符串转换为日期
我想阅读带有Spark的.csv文件,并将这些列与管件类型相关联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(
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])