Spark +2.4读取CSV时如何设置时间戳格式
How to set the timestamp format when reading CSV in Spark +2.4
我在 Azure 上有一个运行 Apache Spark 2.4.0 和 Scala 2.11 的 Databricks 5.3 集群。
我正在尝试使用自定义时间戳格式解析 CSV 文件,但我不知道 Spark 使用哪种日期时间模式格式。
我的 CSV 如下所示:
Timestamp, Name, Value
02/07/2019 14:51:32.869-08:00, BatteryA, 0.25
02/07/2019 14:55:45.343-08:00, BatteryB, 0.50
02/07/2019 14:58:25.845-08:00, BatteryC, 0.34
我正在执行以下操作来阅读它:
%scala
val csvDataFrame = sqlContext.read.format("csv")
.option("header", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("inferSchema", "true")
.option("mode","DROPMALFORMED")
.option("timestampFormat", "MM/dd/yyyy HH:mm:ss.SSSZZ")
.load("path/to/file.csv")
csvDataFrame.printSchema()
但无论我使用什么时间戳模式,第一列总是被推断为字符串。
csvDataFrame:org.apache.spark.sql.DataFrame
Timestamp:string
Name:string
Value:double
我不是 Java/Scala 开发人员,我是 Spark/Databricks 的新手。我在任何地方都找不到 Spark 使用哪个日期时间格式化程序来解析值。
我尝试过的模式:
MM/dd/yyyy HH:mm:ss.SSSZZ
MM/dd/yyyy HH:mm:ss.SSSXXX
事实证明,当 reading/writing CSV 文件时,Databricks 文档提到了一个 dateFormat
选项,但它什么也没做。
正确的选项与 Spark 使用的相同,称为 timestampFormat
.
我的问题是由文件中的一行格式错误引起的。即使使用 DROPMALFORMED,该行也会导致时间戳被解释为字符串。
我在 Azure 上有一个运行 Apache Spark 2.4.0 和 Scala 2.11 的 Databricks 5.3 集群。
我正在尝试使用自定义时间戳格式解析 CSV 文件,但我不知道 Spark 使用哪种日期时间模式格式。
我的 CSV 如下所示:
Timestamp, Name, Value
02/07/2019 14:51:32.869-08:00, BatteryA, 0.25
02/07/2019 14:55:45.343-08:00, BatteryB, 0.50
02/07/2019 14:58:25.845-08:00, BatteryC, 0.34
我正在执行以下操作来阅读它:
%scala
val csvDataFrame = sqlContext.read.format("csv")
.option("header", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("inferSchema", "true")
.option("mode","DROPMALFORMED")
.option("timestampFormat", "MM/dd/yyyy HH:mm:ss.SSSZZ")
.load("path/to/file.csv")
csvDataFrame.printSchema()
但无论我使用什么时间戳模式,第一列总是被推断为字符串。
csvDataFrame:org.apache.spark.sql.DataFrame
Timestamp:string
Name:string
Value:double
我不是 Java/Scala 开发人员,我是 Spark/Databricks 的新手。我在任何地方都找不到 Spark 使用哪个日期时间格式化程序来解析值。
我尝试过的模式:
MM/dd/yyyy HH:mm:ss.SSSZZ
MM/dd/yyyy HH:mm:ss.SSSXXX
事实证明,当 reading/writing CSV 文件时,Databricks 文档提到了一个 dateFormat
选项,但它什么也没做。
正确的选项与 Spark 使用的相同,称为 timestampFormat
.
我的问题是由文件中的一行格式错误引起的。即使使用 DROPMALFORMED,该行也会导致时间戳被解释为字符串。