如何从CSV文件读取自定义格式的日期



我正在解析具有数据为

的CSV文件
03-10-2016,18:00:00,2,6

当我阅读文件时,创建架构如下

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");

其在以下错误为

以下产生
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)

我觉得这是由于日期格式错误所致。将它们转换为特定格式的方法是什么?

在阅读CSV文件时使用dateFormat选项,如下:

val csvs = spark.
  read.
  format("csv").
  option("dateFormat", "dd-MM-yyyy"). // <-- should match 03-10-2016
  load(...)

dateFormat的默认值为yyyy-MM-dd,因此您有解析错误也就不足为奇了。


引用Valueof的Javadoc:

投掷 IllegalArgumentException-如果给出的日期不在JDBC日期逃生格式(yyyy-- [m] m- [d] d)

这意味着该值对valueOf的解析器不正确。

我在这里有两个建议:

  1. 读取数据集和show,以查看您的内部。

  2. 使用dateFormat选项来定义正确的格式(默认为yyyy-MM-dd

在日期和时间模式(java.text.SimpleDateFormat)中找到有关格式模式的更多信息。

相关内容

  • 没有找到相关文章

最新更新