Spark SQL - 用于计算两个日期和时间之间差异的 UDF
Spark SQL - UDF for calculating the difference between two date and times
是否有任何 Spark SQL UDF 可用于计算两个日期和时间之间的差异?
目前 (Spark 2.0) 没有函数可以计算两个日期之间的小时数差,但是有一个函数可以计算天数差:
def
datediff(end: Column, start: Column): Column
Returns the number of days from start to end.
Since
1.5.0
参考。 Scaladoc - functions.
我自己创建了一个。事情是这样的:-
def time_delta(y,x):
from datetime import datetime
end = datetime.strptime(y, '%Y-%m-%d %H:%M:%S')
start = datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
delta = (end-start).total_seconds()
return int(delta/(60*60*24))
这包含两个日期 y 和 x,return 结果以天为单位。我使用下面的代码注册它:-
f = udf(time_delta, IntegerType())
sqlContext.udf.register("time_diff", time_delta)
它就像一个魅力。这是一个例子:-
df = df.withColumn("Duration", f(df.end_date, df.start_date))
df.show()
结果是:-
Column<unix_timestamp(end_date, %Y-%m-%d %H:%M:%S)>
+---+-------------------+-------------------+-----+----+--------+
| id| end_date| start_date|state|city|Duration|
+---+-------------------+-------------------+-----+----+--------+
| 1|2015-10-14 00:00:00|2015-09-14 00:00:00| CA| SF| 30|
| 2|2015-10-15 01:00:20|2015-08-14 00:00:00| CA| SD| 62|
| 3|2015-10-16 02:30:00|2015-01-14 00:00:00| NY| NY| 275|
| 4|2015-10-17 03:00:20|2015-02-14 00:00:00| NY| NY| 245|
| 5|2015-10-18 04:30:00|2014-04-14 00:00:00| CA| SD| 552|
+---+-------------------+-------------------+-----+----+--------+
我也可以在 Spark 中使用它 SQL:-
%sql select time_diff(end_date,start_date) from data_loc
结果是:-
Spark SQL results
是否有任何 Spark SQL UDF 可用于计算两个日期和时间之间的差异?
目前 (Spark 2.0) 没有函数可以计算两个日期之间的小时数差,但是有一个函数可以计算天数差:
def datediff(end: Column, start: Column): Column Returns the number of days from start to end. Since 1.5.0
参考。 Scaladoc - functions.
我自己创建了一个。事情是这样的:-
def time_delta(y,x):
from datetime import datetime
end = datetime.strptime(y, '%Y-%m-%d %H:%M:%S')
start = datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
delta = (end-start).total_seconds()
return int(delta/(60*60*24))
这包含两个日期 y 和 x,return 结果以天为单位。我使用下面的代码注册它:-
f = udf(time_delta, IntegerType())
sqlContext.udf.register("time_diff", time_delta)
它就像一个魅力。这是一个例子:-
df = df.withColumn("Duration", f(df.end_date, df.start_date))
df.show()
结果是:-
Column<unix_timestamp(end_date, %Y-%m-%d %H:%M:%S)>
+---+-------------------+-------------------+-----+----+--------+
| id| end_date| start_date|state|city|Duration|
+---+-------------------+-------------------+-----+----+--------+
| 1|2015-10-14 00:00:00|2015-09-14 00:00:00| CA| SF| 30|
| 2|2015-10-15 01:00:20|2015-08-14 00:00:00| CA| SD| 62|
| 3|2015-10-16 02:30:00|2015-01-14 00:00:00| NY| NY| 275|
| 4|2015-10-17 03:00:20|2015-02-14 00:00:00| NY| NY| 245|
| 5|2015-10-18 04:30:00|2014-04-14 00:00:00| CA| SD| 552|
+---+-------------------+-------------------+-----+----+--------+
我也可以在 Spark 中使用它 SQL:-
%sql select time_diff(end_date,start_date) from data_loc
结果是:- Spark SQL results