从 CSV 加载 Spark v3 中的纯文本日期
Loading plain text dates in Spark v3 from CSV
我正在尝试在 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 升级后可能会得到不同的结果: Fail to recognize 'YYYY' pattern in the DateTimeFormatter. 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
没有崩溃但是 returns 一个空字段。
我使用 Spark v3.1,Java v8。 Java 不是这里的问题 ;).
大写字母Y
是周年模式,不是年模式。您应该使用小写 y
字母作为模式。
所以你的模式应该是 MMMM yyyy
而不是 MMMM YYYY
:
Dataset<Row> df = spark.read().format("csv")
.option("header", true)
.option("dateFormat", "MMMM yyyy")
.schema(schema)
.load("my.csv");
我正在尝试在 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 升级后可能会得到不同的结果: Fail to recognize 'YYYY' pattern in the DateTimeFormatter. 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
没有崩溃但是 returns 一个空字段。
我使用 Spark v3.1,Java v8。 Java 不是这里的问题 ;).
大写字母Y
是周年模式,不是年模式。您应该使用小写 y
字母作为模式。
所以你的模式应该是 MMMM yyyy
而不是 MMMM YYYY
:
Dataset<Row> df = spark.read().format("csv")
.option("header", true)
.option("dateFormat", "MMMM yyyy")
.schema(schema)
.load("my.csv");