首页 > 解决方案 > Spark SQL Datediff 列之间的分钟数

问题描述

我在一个表中有 2 列(两个日期,格式化为字符串类型)。我需要在几分钟内找到它们之间的差异,然后平均一年的差异。

格式如下: 请求时间:11/10/2019 03:10:15 PM 响应时间:11/10/2029 03:20:10 PM

有什么建议么?

标签: apache-sparkapache-spark-sql

解决方案


You can register a user defined function 

import datetime
def min_diff(a,b):
  start_time = datetime.datetime.strptime(a,'%m/%d/%Y %I:%M:%S %p')
  end_time = datetime.datetime.strptime(b,'%m/%d/%Y %I:%M:%S %p')
  return (end_time-start_time).total_seconds()/60
def year(c):
  return datetime.datetime.strptime(c,'%m/%d/%Y %I:%M:%S %p').strftime('%Y')
spark.udf.register(name='min_diff',f=lambda a,b:min_diff(a,b))
spark.udf.register(name='year', f=lambda c:year(c))
spark.sql('select avg(min_diff(start_time,end_time)) avg_time_diff, year(start_time) year from test_table group by year').show()

推荐阅读