Pyspark:如何修复“无法分析数据类型”:间隔误差

rdlzhqv9  于 2023-05-16  发布在  Spark
关注(0)|答案(2)|浏览(90)

我试图通过减去两个现有列的值来向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_birthcurrent_date的值来插入age列。

df = df.withColumn('age', (df['current_date'] - df['date_of_birth ']))

细胞运行没有问题。

我被困在这里

当我尝试再次显示我的dataframe以验证一切顺利时,发生以下错误:
'无法分析数据类型:间隔
我使用了df.types()来检查发生了什么,显然我新插入的age列是interval类型的。
我该怎么解决这个问题?
在这个特定的场景中,有没有一种方法可以显示年龄(以年为单位)?
PS:date_of_birthcurrent_date的cols都有date类型。

nukf8bse

nukf8bse1#

解决了,迈克的评论帮了大忙.谢谢你!
我是这样解决的:

# insert new column current_date with dummy data (in this case, 1s)
df = df.withColumn("current_date", lit(1))

# update data with current_date() function
df  = df .withColumn("current_date", f.current_date())

# insert new column age with dummy data (in this case, 1s)
df  = df .withColumn("age", lit(1))

# update data with months_between() function, divide by 12 to obtain years.
df  = df  .withColumn("age", f.months_between(df.current_date, df  .date_of_birth)/12)

# round and cast as interger to get rid of decimals
df  = df  .withColumn("age", f.round(df["age"]).cast('integer'))

相关问题