Spark:如何打印时间戳列和时区?

问题描述 投票:0回答:1

有一个场景,我们从 Teradata(SRC) 获取输入数据并将其加载到 Spark Hive 仓库中。我们有一个时间戳列和时区,如下所示,并且希望在读取 Spark SQL 并将其存储在数据帧中以进行进一步的 ETL 计算时看到相同的内容。主要列应该仅是时间戳数据类型。

# Input table column values(printing only one column from the Teradata table):
# 9999.12.31 10:15:00+03:00
# 9999.12.31 10:15:00+05:30
# 9999.12.31 10:15:00+03:00
   
df = spark.sql("""select to_timestamp('9999.12.31 10:15:00+03:00', 
                                      "yyyy.MM.dd HH:mm:ss")""")

# 9999.12.31 10:15:00
# 9999.12.31 10:15:00
# 9999.12.31 10:15:00

现在,我们需要打印该值以及时区。但我们需要在输出处理中导出与输入列中相同的内容。

sql pyspark apache-spark-sql timestamp
1个回答
0
投票

试试这个:

spark.conf.set("spark.sql.session.timeZone", "UTC+03")
df = spark.sql(
    """select date_format(cast(to_timestamp('9999.12.31 10:15:00+03:00', 'yyyy.MM.dd HH:mm:ssVV') as timestamp), 'yyyy.MM.dd HH:mm:ssxxx') as ts_with_offset"""
)
df.show(truncate=False)

Output:
+-------------------------+-------------------------+
|input_column             |ts_with_offset           |
+-------------------------+-------------------------+
|9999.12.31 10:15:00+03:00|9999.12.31 10:15:00+03:00|
|9999.12.31 10:15:00+05:30|9999.12.31 07:45:00+03:00|
|9999.12.31 10:15:00+03:00|9999.12.31 10:15:00+03:00|
+-------------------------+-------------------------+

有一件事是 - 它仅保留

+03:00
偏移量并调整此偏移量的其他时区。要按原样打印其他胶印,您必须想出一个解决方法。也许是一个以某种方式动态设置偏移值的 UDF。

© www.soinside.com 2019 - 2024. All rights reserved.