在Spark SQL中以分钟或秒为单位获取时差

时间:2019-06-14 22:48:44

标签: apache-spark-sql pyspark-sql

我有一张像这样的桌子:

# Sample table
building |   date     |  start_time          |  end_time
-----------------------------------------------------------------
  A      | 2019-01-01 | 2019-01-01 08:30:42  | 2019-01-01 08:30:50
  A      | 2019-01-01 | 2019-01-01 09:20:52  | 2019-01-01 09:20:56
  A      | 2019-01-02 | 2019-01-02 10:21:12  | 2019-01-02 10:21:20
  B      | 2019-01-01 | 2019-01-01 06:53:22  | 2019-01-01 06:53:27
  B      | 2019-01-02 | 2019-01-02 07:56:36  | 2019-01-02 07:56:41
  B      | 2019-01-02 | 2019-01-02 08:45:08  | 2019-01-02 08:45:15

我想获取start_timeend_time之间的时差,以秒为单位,按buildingdate分组。以下使用date_diff的代码可在Athena或Presto中使用,但不适用于Spark SQL。 Spark SQL中有没有办法做到这一点?

# Works in Athena or Presto but not Spark SQL
select 
  building,
  date,
  avg(date_diff('minute', start_time, end_time)) as length
from schema.table
group by 1, 2

# Outcome in Athena or Presto
building   |     date     | length
---------------------------------------
  A        |  2019-01-01  |   6 
  A        |  2019-01-02  |   8
  B        |  2019-01-01  |   5
  B        |  2019-01-02  |   6

P.S。我知道如何在SparkR或PySpark中执行groupby操作。我只对这里的Spark SQL解决方案感兴趣。

0 个答案:

没有答案