Spark Age Calculation Interval数据类型



我的spark df由列组成-PersonId, DateofBirth

如果我进行以下计算得出年龄:--func.current_date() - df.DateOfBirth

输出是具有等值的数据类型间隔

  • 45年2天
  • 67年15天

如何从Interval数据类型中提取Year值有什么建议吗?

到目前为止,Spark无法以本机方式对Interval Type执行rom操作。它可以创建Interval类型,但不能对其执行任何进一步的操作。请参阅打开的JIRA问题:issues.apache.org/JIRA/browse/SPARK-33054

使用Scala,您可以使用UDF执行以下操作:

import org.apache.spark.sql.{functions => F}
import spark.implicits._
import org.apache.spark.unsafe.types.CalendarInterval
val getPeriod = udf((x: CalendarInterval) => x.extractAsPeriod().getDays())
spark.udf.register("getPeriod", getPeriod)
val testDF = (spark.createDataFrame(List("1970-01-01", "1970-01-02").map(Tuple1(_)))
.toDF("DateofBirth")
.withColumn("DateofBirth", F.to_date(F.col("DateofBirth"))));
(testDF.withColumn("interval", F.to_date(F.lit("1970-01-10")) - F.col("DateofBirth"))
.withColumn("diff", getPeriod(F.col("interval")))
.collect());

最新更新