我试图通过减去两个现有列的值来向pyspark df添加一个新列。
我已经有一个date_of_birth
列可用,所以我插入了一个current_date
列,代码如下:
import datetime
currentdate = "14-12-2021"
day,month,year = currentdate.split('-')
today = datetime.date(int(year),int(month),int(day))
df= df.withColumn("current_date", lit(today))
显示我的df确认它工作。看起来有点像这样:
| 身份证|出生日期|当前日期|
| --------------|--------------|--------------|
| 01| 1995-01-01| 2021-12-2021年|
| 02| 1987-02-16| 2021-12-2021年|
我通过减去date_of_birth
和current_date
的值来插入age
列。
df = df.withColumn('age', (df['current_date'] - df['date_of_birth ']))
细胞运行没有问题。
我被困在这里
当我尝试再次显示我的dataframe以验证一切顺利时,发生以下错误:
'无法分析数据类型:间隔
我使用了df.types()来检查发生了什么,显然我新插入的age
列是interval类型的。
我该怎么解决这个问题?
在这个特定的场景中,有没有一种方法可以显示年龄(以年为单位)?
PS:date_of_birth
和current_date
的cols都有date类型。
2条答案
按热度按时间nukf8bse1#
解决了,迈克的评论帮了大忙.谢谢你!
我是这样解决的:
jslywgbw2#
将使用其中一个pyspark函数来计算日期之间的差异。
pyspark.sql.functions.datediff
https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.functions.datediff.html
pyspark.sql.functions.months_between
https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.months_between.html