火花时间差



From 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的解决方案吗?还是我错过了一个将差异转换为天到年的选项?

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。

相关内容

  • 没有找到相关文章