spark - 如何从时间戳中提取小时?

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

请帮助理解为什么

date_format
无法在
8:15am
提取 08:15

spark.sql("select date_format(date '1994-11-05T08:15:30-05:00', 'hh:mm') AS hour_in_day_number").show()

+------------------+
|hour_in_day_number|
+------------------+
|             12:00|
+------------------+
spark.sql("select date_format(date '1994-11-05T08:15:30-05:00', 'HH:mm') AS hour_in_day_number").show()

+------------------+
|hour_in_day_number|
+------------------+
|             00:00|
+------------------+
spark.sql("select date_format(date '1994-11-05T08:15:30-05:00', 'kk:mm') AS hour_in_day_number").show()

+------------------+
|hour_in_day_number|
+------------------+
|             24:00|
+------------------+

W3C 日期和时间格式

示例
1994-11-05T08:15:30-05:00 对应于 1994 年 11 月 5 日上午 8:15:30,美国东部标准时间。

用于格式化和解析的日期时间模式

符号 意义 演示 示例
G 时代 文字 AD;安诺·多米尼
y 2020; 20
D 一年中的某一天 数量(3) 189
中号/中号 一年中的月份 7; 07;七月;七月
d 每月的某天 数量(3) 28
Q/q 季度 数字/文字 3; 03; Q3;第三季度
E 星期几 文字 周二;星期二
F 对齐月份中的星期几 数字(1) 3
a 当天上午-下午 上午-下午 下午
h 上午-下午 (1-12) 数字(2) 12
K 上午-下午 (0-11) 数字(2) 0
k 一天中的时钟时间 (1-24) 数字(2) 0
H 一天中的某个小时(0-23) 数字(2) 0
每小时分钟 数字(2) 30
s 每分钟 数字(2) 55
S 秒的小数部分 分数 978
V 时区ID 区域 ID 美国/洛杉矶; Z; -08:30
z 时区名称 区域名称 太平洋标准时间;太平洋标准时间
O 局部区域偏移 偏移-O 格林威治标准时间+8;格林尼治标准时间+08:00; UTC-08:00;
X 区域偏移“Z”为零 偏移-X Z; -08; -0830; -08:30; -083015; -08:30:15;
x 区域偏移 偏移量-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z 区域偏移 偏移-Z +0000; -0800; -08:00;

环境

$ spark-submit --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.1.2
      /_/
                        
Using Scala version 2.12.10, OpenJDK 64-Bit Server VM, 1.8.0_312
Branch HEAD
Compiled by user centos on 2021-05-24T04:27:48Z
Revision de351e30a90dd988b133b3d00fa6218bfcaba8b8
Url https://github.com/apache/spark
Type --help for more information.
apache-spark datetime
1个回答
2
投票

您使用了

date
,它只保留年月日。

您可以尝试使用

timestamp
,如下所示:

scala> spark.sql("select date_format(timestamp '1994-11-05T08:15:30-05:00', 'hh:mm') AS hour_in_day_number").show()
+------------------+
|hour_in_day_number|
+------------------+
|             05:15|
+------------------+

您可以参考https://databricks.com/blog/2020/07/22/a-compressive-look-at-dates-and-timestamps-in-apache-spark-3-0.html

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