当前位置: 首页 > 知识库问答 >
问题:

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

滕星纬
2023-03-14

请帮助理解为什么date_format不提取08:15为8:15am?

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。

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

$ 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.

共有1个答案

鲁波光
2023-03-14

您使用了日期,它只保留年、月和日。

您可以尝试使用tiemstamp,如下所示:

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-comprehensive-look-at-dates-and-timestamps-in-apache-spark-3-0.html

 类似资料:
  • 我选择“无时区”是因为我知道我的应用程序使用的所有时间戳总是UTC。就我得到的文档而言,“with timestamp”的唯一区别是,我可以提供其他时区的值,然后将其转换为UTC。然而,我想避免这样的自动转换,因为如果我知道我的值是UTC,它们几乎没有任何好处。 当我在测试表中添加新记录并使用pgAdmin查看表的内容时,我可以看到插入日期已正确地保存为UTC格式。 但是,当我尝试使用JDBC选择

  • 我使用这个库在我的Android应用程序中使用FFmpeg。我正在从视频中提取帧,然后将它们添加到裁剪查看器中。因此,每一帧都需要表示视频中的某个时间帧。下面是我当前提取帧的ffmpeg代码: 感谢任何帮助

  • 我试图将日志文件索引到弹性搜索。所有日志条目都被索引到一个名为消息的字段中。@时间戳字段显示条目被索引的时间,而不是日志条目的时间戳。 我用grok processor创建了一个摄取管道来定义日志条目的模式。我尝试了几种模式,但都无法实现,尤其是因为我是新手。 日志样本 用grok吞食管道 我想要的就是能够从日志消息中提取时间戳,其他所有内容都可以被忽略、通配符或存储在一个变量中,比如消息。因此,

  • 当我使用spark-submit with master yarn和deploy-mode cluster提交spark作业时,它不会打印/返回任何applicationId,一旦作业完成,我必须手动检查MapReduce jobHistory或spark HistoryServer来获取作业细节。 我的集群被许多用户使用,在jobHistory/HistoryServer中找到我的作业需要很多时

  • 在hbase中,我有很多列:name,city,... 不是所有列都有值(例如,有些行只能有'name') 我想提取一行中的所有列+列的时间戳(按特定顺序),如果值为null,我想返回空字符串。 我面临的问题是,我必须通过'family'和'qualifier'访问中的列(我不能通过的索引访问,因为空值被跳过)

  • 我有一个Kafka分区,和一个parkStreaming应用程序。一个服务器有10个内核。当火花流从Kafka收到一条消息时,后续过程将需要5秒钟(这是我的代码)。所以我发现火花流读取Kafka消息很慢,我猜当火花读出一条消息时,它会等到消息被处理,所以读取和处理是同步的。我想知道我可以异步读取火花吗?这样从Kafka读取的数据就不会被后续处理拖动。然后火花会很快消耗来自Kafka的数据。然后我可