pyspark 如何解析没有T符号和+符号的Spark sql timestamp

rbl8hiat  于 12个月前  发布在  Spark
关注(0)|答案(2)|浏览(90)

当我在pyspark中使用下面的函数时,它会创建一个带有T和+的时间戳。
版本--> Spark 3.3
如何创建具有yyyy-MM-dd HH:mm:ss.SSS格式的值的时间戳列

spark.sql("""
            select current_timestamp(), now()  from dbo.products 
            """
      ).display()

预期:

2023-08-25 09:04:21.684  2023-08-25 09:04:21.684

实际:

2023-08-25T09:04:21.684+0000     2023-08-25T09:04:21.684+0000
6tr1vspr

6tr1vspr1#

from pyspark.sql import SparkSession
from pyspark.sql.functions import current_timestamp, date_format, expr, concat
from pyspark.sql.types import TimestampType

spark = SparkSession.builder.appName("SparkSQLExample").getOrCreate()

result = spark.sql("""
    SELECT
        current_timestamp() as current_time
""")

result_with_format = result.withColumn(
    "current_time_formatted",
    concat(
        date_format(result["current_time"], "yyyy-MM-dd'T'HH:mm:ss.SSS"),
        expr("'+0000'")
    )
)

result_with_format = result_with_format.withColumn(
    "current_time_converted",
    result_with_format["current_time_formatted"].cast(TimestampType())
)

result_with_format.show(truncate=False)

我得到了相同的格式,因为你得到这样使用您所需的输出转换

由于特定的实现和设置,在Databricks中show和display的默认行为可能确实显示了不同的时间戳格式。在标准PySpark中,show函数通常以“yyyy-MM-dd HH:mm:ss.SSS”格式显示时间戳,而Databricks中的display函数可以配置为以所需的“yyyy-MM-dd 'T'HH:mm:ss.SSS+0000”格式显示时间戳。
如果您在Databricks环境中工作,则可能已经将使用display设置为以更易于阅读的格式显示时间戳。如果您观察到show和display之间的不同行为,则可能是特定于数据块的功能。要确保一致性和所需的格式,您可能需要参考Databricks文档或设置以了解时间戳显示首选项。
欲了解更多信息,请访问此a link

c9qzyr3d

c9qzyr3d2#

简单的解决方案是将timestamp转换为string数据类型。
检查下面。

相关问题