1

從spark 1.5.x開始,增加了一些便利方法來處理時間。火花時間差

df.select(datediff($"A", $"B")).show 

但是,這會返回天數的差異。是否有任何選擇將其轉換爲不同的時間間隔年份?

手動我用

df.select(year($"A")- year($"B")).show 

這是不夠好。但如果日期差異更準確地計算,則會更好。包括像顯示的月/日http://howtodoinjava.com/for-fun-only/java-code-to-calculate-age-from-date-of-birth/

UDF是當前spark 2.0.2的解決方案嗎?或者我錯過了將差異轉換爲天數的選項年份?

回答

3

Timestamp類型可以轉換爲它的Unix時間戳,以秒爲單位。如果這個分辨率對你來說足夠好,其餘的只是一堆算術運算。根據您的需要

import org.apache.spark.sql.Column 

def secondsBetween(col1: Column, col2: Column) = 
    col2.cast("timestamp").cast("bigint") - col1.cast("timestamp").cast("bigint") 

並重新樣品,例如:你可以在幾秒鐘內爲計算差異

def minutesBetween(col1: Column, col2: Column) = 
    (secondsBetween(col1, col2)/60).cast("bigint") 

顯然,這不處理的日期和時間處理類似日光的所有細微之處節省時間或閏秒,所以如果這些在您的域中很重要,那麼建議使用帶有適當時間處理庫的UDF。