pyspark 如何在Spark中将字符串“yyyy-MM-ddThh:mm:ss+XXXX”转换为正确的date_format?

laawzig2  于 2023-03-17  发布在  Spark
关注(0)|答案(2)|浏览(147)

我有一个包含字符串数据的列,比如“2023-03- 13 T15:18:14+0700"。我的最终目标是将它转换为正确的日期格式,比如“2023-03-13 15:18:14"。最好将时间转换为GMT+7(我的位置),然后删除“T”和“+XXXX”部分。但如果太难或不可能做到,我只需要删除“T”和“+0700”,因为我的大部分数据都是“+0700”。
我在SOF上看了很多帖子,但是到目前为止都没有运气。例如,X1 E0 F1 X,X1 E1 F1 X,最接近的是X1 E2 F1 X,但是没有运气,因为它们的格式和我的有点不同。
下面是我从最新帖子中得到的:

object test extends App {
  val spark = SparkSession.builder().master("local[*]").getOrCreate()
  import spark.implicits._
  val df = Seq("2023-03-13T15:18:14+0700").toDF("time")

  val result = df.select(to_timestamp(col("time"), "yyyy-MM-dd'T'hh:mm:ss.SSSXXX").alias("newtime"))
  result.show(truncate = false) // Null

  val result1 = df.select(to_timestamp(col("time"), "yyyy-MM-dd'T'hh:mm:ssXXX").alias("newtime"))
  result1.show(truncate = false) // Null
}
fjnneemd

fjnneemd1#

您使用的格式不正确,您的日期类型为ISO 8601,正确的格式为yyyy-MM-dd'T'HH:mm:ssZ,下面是使用to_timestamp函数的方法:

spark = SparkSession.builder.master("local[*]").getOrCreate()
df = spark.createDataFrame([["2023-03-13T15:18:14+0700"]], ['time'])
df = df.withColumn("timestamp_utc", to_timestamp("time", "yyyy-MM-dd'T'HH:mm:ssZ"))
df.show(truncate=False)
df.printSchema()

+------------------------+-------------------+
|time                    |timestamp_utc      |
+------------------------+-------------------+
|2023-03-13T15:18:14+0700|2023-03-13 09:18:14|
+------------------------+-------------------+

root
 |-- time: string (nullable = true)
 |-- timestamp_utc: timestamp (nullable = true)
62lalag4

62lalag42#

使用cast()变换

from pyspark.sql.functions import col
from pyspark.sql.types import TimestampType

df = df.withColumn("time", col("time").cast(TimestampType()))

df.show()

输出

+-------------------+
|               time|
+-------------------+
|2023-03-13 08:18:14|
+-------------------+

架构

root
 |-- time: timestamp (nullable = true)

相关问题