将具有 UTC 偏移量的字符串转换为 Spark 时间戳偏移量

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

我正在尝试使用Glue使用sparksql(spark cluster 3.0)将来自s3/csv文件的字符串转换为aurora mysql

csv 中的现有字符串值:20231021134021+0100 预期时间戳:2023-10-21 14:40:21(添加了偏移时间)

from awsglue.dynamicframe import DynamicFrame


# Use Spark SQL to parse the date-time string and add the time zone offset
spark_sql = glueContext.sql("""
    SELECT
           DATE_ADD(
               to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss'),
               INTERVAL CAST(SUBSTRING(your_datetime_column, 15, 2) AS INT) HOURS
               + CAST(SUBSTRING(your_datetime_column, 17, 2) AS INT) MINUTES
           ) AS 
    FROM my_data
""")

result_df = spark.sql(spark_sql)

result_dyf = DynamicFrame.fromDF(result_df, glueContext, "result_dyf")

我收到解析错误,INTERVAL 不支持强制转换吗? 如果我只是使用直到时间戳如下

select to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss') from my_data

或 从 my_data 选择 to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss') + INTERVAL 1 分钟 两者都工作得很好,但当我使用提取偏移量时则不行

有更好的方法来处理如何在时间戳内包含偏移值吗?

apache-spark apache-spark-sql aws-glue amazon-aurora
1个回答
0
投票

有一个专用的

x
pattern 用于区域偏移,因此解析字符串值非常简单:

spark.sql("""select to_timestamp('20231021134021+0100', 'yyyyMMddHHmmssx') as ts""").show
+-------------------+
|                 ts|
+-------------------+
|2023-10-21 14:40:21|
+-------------------+
© www.soinside.com 2019 - 2024. All rights reserved.