2016-09-22 403 views

回答

0

沒有功能現在(火花2.0)來計算時數兩個日期之間的差,但有一個來計算的天數的差異:

DEF DATEDIFF (結束:列,開始:列):列 返回從開始到結束的天數。由於 1.5.0

Ref。 Scaladoc - functions

1

我自己創建了一個。這是怎麼回事: -

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並返回結果以天爲單位。我使用下面的代碼註冊它: -

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| 
+---+-------------------+-------------------+-----+----+--------+ 

我也能在星火SQL使用它: -

%sql select time_diff(end_date,start_date) from data_loc 

而且結果是: - Spark SQL results

相關問題