如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Hive 中将 Long 转换为时间戳

在scala中将时间字符串转换为时间戳/日期时间

使用 PySpark 将日期和时间字符串转换为时间戳时如何保留毫秒?

在 Spark 中将字符串字段转换为时间戳的更好方法

Spark SQL - 从 oracle 导入时将 oracle 日期数据类型错误转换为时间戳(java.sql)

如何将日期和时间转换为时间戳