【发布时间】:2021-09-02 21:24:16
【问题描述】:
我正在尝试在 Apache Spark 中提取带有日期的非常基本的 CSV 文件。复杂性在于被阐明的几个月。出于分析目的,我想将这些月份作为日期。这是我的 CSV 文件:
Period,Total
"January 2000","5394"
"February 2000","5249"
"March 2000","6447"
"April 2000","6062"
"May 2000","6342"
"June 2000","6914"
我尝试使用以下方法提取数据:
// Creates the schema
StructType schema = DataTypes.createStructType(new StructField[] {
DataTypes.createStructField(
"month",
DataTypes.DateType,
false),
DataTypes.createStructField(
"ct",
DataTypes.IntegerType,
true) });
// Reads a CSV file with header
Dataset<Row> df = spark.read().format("csv")
.option("header", true)
.option("dateFormat", "MMMM YYYY")
.schema(schema)
.load("my.csv");
Spark 不太喜欢我使用的dateFormat...并给了我:
org.apache.spark.SparkUpgradeException:由于 Spark 3.0 的升级,您可能会得到不同的结果:无法识别 DateTimeFormatter 中的 'YYYY' 模式。 1)您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY 以恢复 Spark 3.0 之前的行为。 2)您可以使用https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html的指南形成有效的日期时间模式
我试过LLLL YYYY、M Y、MMMM Y...LLLL YYYY 没有崩溃但返回一个空字段。
我使用 Spark v3.1、Java v8。 Java 不是这里的问题;)。
【问题讨论】:
标签: java csv apache-spark date data-ingestion