M-T*_*ier 4 sql csv scala 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(
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")
Run Code Online (Sandbox Code Playgroud)
我正在阅读的一行 .csv 看起来像这样
+----------+--------+-----+-----+-----+
| date| time| am| hum| temp|
+----------+--------+-----+-----+-----+
|04.10.2016|12:51:20|1.121|0.149|0.462|
+----------+--------+-----+-----+-----+
Run Code Online (Sandbox Code Playgroud)
如果我将日期的类型设置为字符串,Spark 将读取 .csv 并正确关联类型。如果我像上面显示的代码一样保留 customSchema,由于日期格式错误,Spark 将抛出异常(DateType will expect YYYY-MM-DD while mine is DD.MM.YYYY).
有没有办法将日期字符串重新格式化为 YYYY-MM-DD 并在之后应用架构?或者我也可以通过添加参数来改变 Spark 给出的 DateType ?
提前致谢
小智 5
使用dateFormat选项:
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")
Run Code Online (Sandbox Code Playgroud)