繁体   English   中英

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

[英]Convert Date of Birth into Age in Spark Dataframe API

这似乎很简单,但我找不到答案。 我正在尝试将以下日期格式的出生日期列转换为Spark Dataframe API中的日期格式,然后计算相应的年龄。 我可能还需要系统日期。 我发现一些Java库可能有用,但在将其与DataFrame API结合使用时仍然遇到一些困难。

67年8月23日
28-FEB-66
09-APR-59

2015年9月9日编辑 :我刚刚发现Spark 1.5.0添加了“日期时间函数”,这将在以后在此处发布1.5.0时提供帮助。 不幸的是,它不适用于AWS EMR中的当前spark版本。

2015年9月10日晚上编辑 :我可以使用以下代码将出生日期转换为年龄。
请注意,不赞成使用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))

我可以使用带有SQL日期格式的udf将生日列的日期转换为年龄。 请查看编辑以获取详细信息。

与其使用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应该问题不大)。

select datediff(current_date(),
         TO_DATE(CAST(UNIX_TIMESTAMP(dateOfBirth,'yyyy-MM-dd') AS TIMESTAMP)))/365 as age
  from <TABLE_NAME>
LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM