拆分时间戳 Spark databricks python SQL

Posted

技术标签:

【中文标题】拆分时间戳 Spark databricks python SQL【英文标题】:Split timestamps Spark databricsk python SQL 【发布时间】:2021-06-09 15:35:13 【问题描述】:

我有两列。

Start Stop
2021-02-02 18:00:000 2021-02-03 02:00:00

但我需要

Start Stop
2021-02-02 18:00:000 2021-02-02 23:59:59:997
2021-02-03 00:00:000 2021-02-03 02:00:00

我需要计算每天的持续时间。 我尝试使用 Spark SQL 来实现,但没有成功。如果您有任何使用 pyspark 或 Spark sql 的想法,那就太好了。

编辑: 我尝试过使用 concat 和 explode:

Start Stop
2021-02-02 18:00:00, 2021-02-03 00:00:00 2021-02-02 23:59:59, 2021-02-03 02:00:00

但我无法分解多个列。

此外,我也有日期范围超过 1 天的情况。

Start Stop
2021-02-02 18:00:000 2021-02-08 02:00:00

【问题讨论】:

你能更清楚你想要什么吗?你有columns = ["start", "stop"] 的数据框吗?什么是输入,什么是期望的输出? 火花版本? 这需要在 spark 中完成吗?我们可以使用 pandas 并将其转换为 spark 数据框吗?如果您不打算在输出 df 中包含数百万个条目,那应该是一个可行的解决方案。 我对这些列有一个临时视图。输入 - csv,输出 - 临时视图/数据框。火花版本 3.0.1。它也可以是 pandas 数据框。 【参考方案1】:

检查下面的代码。

df.show(false)
+-------------------+-------------------+
|start              |stop               |
+-------------------+-------------------+
|2021-02-02 18:00:00|2021-02-03 02:00:00|
+-------------------+-------------------+
df.withColumn("dates",expr("explode(cast(transform(sequence(0,datediff(stop,start)), x -> (case when start > to_timestamp(date_add(start,x)) then start else to_timestamp(date_add(start,x)) end,case when start > to_timestamp(date_add(start,x)) then to_timestamp(unix_timestamp(date_add(start,x+1))-1) else stop end)) as array<struct<start:timestamp,stop:timestamp>>))")).select("dates.*").show(false)
+-------------------+-------------------+
|start              |stop               |
+-------------------+-------------------+
|2021-02-02 18:00:00|2021-02-02 23:59:59|
|2021-02-03 00:00:00|2021-02-03 02:00:00|
+-------------------+-------------------+

【讨论】:

谢谢,但我有一个临时视图,并且该 scala 代码不可见。我有一个错误“未找到:值 df” 您可以将数据加载到 spark 数据帧中并使用上面的代码。 它可以工作,但我需要 python 或 sql 中的代码。感谢您的帮助。 可以直接在sql中使用expr()里面的代码。它应该可以工作。

以上是关于拆分时间戳 Spark databricks python SQL的主要内容,如果未能解决你的问题,请参考以下文章

spark sql时间戳数据类型是不是实际存储时区?

Databricks getArgument 值不能在 Spark SQL IN 子句中使用

Databricks 时间戳格式 - 如何找到确切的格式?

Azure Databricks:如何在 Databricks 群集中添加 Spark 配置

Databricks 中的 Spark 版本

如何在 Databricks 中使用 Python 将数据框数组拆分为列