Utk*_*raf 3 csv apache-spark apache-spark-sql
我正在解析一个包含数据的 csv 文件
03-10-2016,18:00:00,2,6
Run Code Online (Sandbox Code Playgroud)
当我阅读文件创建模式如下
StructType schema = DataTypes.createStructType(Arrays.asList(
                DataTypes.createStructField("Date", DataTypes.DateType, false),
                DataTypes.createStructField("Time", DataTypes.TimestampType, false),
                DataTypes.createStructField("CO(GT)", DataTypes.IntegerType, false),
                DataTypes.createStructField("PT08.S1(CO)", DataTypes.IntegerType, false)))
Dataset<Row> df = spark.read().format("csv").option("Date", "dd-MM-yyyy").schema(schema).load("src/main/resources/AirQualityUCI/sample.csv");
Run Code Online (Sandbox Code Playgroud)
它产生以下错误为
Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Unknown Source)
    at org.apache.spark.sql.catalyst.util.DateTimeUtils$.stringToTime(DateTimeUtils.scala:137)
Run Code Online (Sandbox Code Playgroud)
我觉得这是由于日期格式错误。将它们转换成特定格式的方法有哪些?
dateFormat读取 CSV 文件时使用选项如下:
val csvs = spark.
  read.
  format("csv").
  option("dateFormat", "dd-MM-yyyy"). // <-- should match 03-10-2016
  load(...)
Run Code Online (Sandbox Code Playgroud)
默认为dateFormat,yyyy-MM-dd因此您遇到解析错误也就不足为奇了。
引用valueOf的 javadoc :
抛出
IllegalArgumentException- 如果给定的日期不是 JDBC 日期转义格式 (yyyy-[m]m-[d]d)
这意味着该值对于 的解析器不正确valueOf。
我在这里有两个建议:
阅读数据集和show它,看看里面有什么。
使用dateFormat选项来定义正确的格式(yyyy-MM-dd默认情况下)
在Date and Time Patterns (of java.text.SimpleDateFormat) 中找到有关格式模式的更多信息。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4381 次  |  
        
|   最近记录:  |