如何使用 Scala 在 Spark 中转换为时间戳,例如 2019-03-25T00:27:46.985-0500 到 2019-03-25 00:27:46
Posted
技术标签:
【中文标题】如何使用 Scala 在 Spark 中转换为时间戳,例如 2019-03-25T00:27:46.985-0500 到 2019-03-25 00:27:46【英文标题】:How to convert to a timestamp which is like 2019-03-25T00:27:46.985-0500 to 2019-03-25 00:27:46 in Spark with Scala 【发布时间】:2019-04-10 08:28:34 【问题描述】:我想将看起来像 2019-03-25T00:27:46.985-0500 的时间戳转换为这种格式 2019-03-25 00:27:46
使用 Spark v2.3.0 斯卡拉 v2.11.8
时间 ColA ColB ColC 2019-03-25T00:27:46.985-0500 A B C 2019-03-25T00:27:46.960-0500 A B C 2019-03-25T00:27:46.839-0500 A B C 2019-03-25T00:27 :46.596-0500 A B C 2019-03-25T00:27:46.559-0500 A B C 2019-03-25T00:27:46.535-0500 A B C 2019-03-25T00:27:46.453-0500 A B C 2019-03-205T00: -0500 A B C 2019-03-25T00:27:46.393-0500 A B C
val log = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.option("sep", ",")
.option("quote", "\"")
.option("multiLine", "true")
.load("time.csv")
scala> log.printSchema
root
|-- time: string (nullable = true)
|-- ColA: string (nullable = true)
|-- ColB: string (nullable = true)
|-- ColC: string (nullable = true)
val logs = log.withColumn("Id", monotonicallyIncreasingId()+1)
val df = spark.sql("select Id, time, ColA from logs")
输入:2019-03-25T00:27:46.985-05:00 预计产出:2019-03-25 00:27:46
【问题讨论】:
Parsing datetime from ISO 8601 using Spark SQL的可能重复 【参考方案1】:您可以将 .selectExpr 与 date_format 函数一起使用
val log2 = log.selectExpr(
"date_format(time, 'yyyy-MM-dd HH:mm:ss')"
)
【讨论】:
以上是关于如何使用 Scala 在 Spark 中转换为时间戳,例如 2019-03-25T00:27:46.985-0500 到 2019-03-25 00:27:46的主要内容,如果未能解决你的问题,请参考以下文章
使用 PySpark 将日期和时间字符串转换为时间戳时如何保留毫秒?