在Spark Dataframe API中将出生日期转换为年龄

这似乎很简单,但我找不到答案。我正在尝试将以下日期格式的出生日期列转换为Spark Dataframe

API中的日期格式,然后计算相应的年龄。我可能还需要系统日期。我发现一些Java库可能有用,但在将其与DataFrame API结合使用时仍然遇到一些困难。

23-AUG-67

28-FEB-66

09-APR-59

:我刚刚发现Spark

1.5.0添加了“日期时间功能”,这将在以后在此处发布1.5.0时提供帮助。不幸的是,它不适用于AWS

EMR中的当前spark版本。

:我可以使用以下代码将出生日期转换为年龄。

请注意,该getYear()功能已被弃用,但据我所知,它们可以正常工作。

import java.sql.Date

import java.text.SimpleDateFormat

import org.apache.spark.sql.SQLContext

val sqlsc= new SQLContext(sc)

val epoch = System.currentTimeMillis

val curDate = new Date(epoch)

val dtFormat = new SimpleDateFormat("dd-MMM-yy")

val dobToAge = udf( (dob: String) => {

val javaUtilDate = dtFormat.parse(dob)

val sqlDate = new Date(javaUtilDate.getTime())

curDate.getYear - sqlDate.getYear

})

inputdata.withColumn("AGE", dobToAge('dob))

回答:

与其使用java.util.Date的getXXX方法,不如使用java.util.Calendar。

同样,您的解决方案并非在所有情况下都有效。如果某人于1976年12月31日出生,那么他的年龄将被计算为2015-1976 =

39,即使在2015年1月1日,他将几乎整整39岁。

您应该使用如下所示的计算方法:http : //howtodoinjava.com/2014/05/26/java-

code-to-calculate-age-from-date-of-

birth/(将Java代码转换为Scala应该问题不大)。

以上是 在Spark Dataframe API中将出生日期转换为年龄 的全部内容, 来源链接: utcz.com/qa/409803.html

回到顶部