我有一个带有日期类型的列date_key
的数据框。问题是我想创建仅包含yyyy-mm
的{{1}}部分的另一列,但仍保留其日期类型。我尝试了date_key
,但该方法无效。还尝试了(to_date(df[date_key],'YYYY-MM')
,但结果是字符串而不是日期类型。有人可以帮忙吗?非常感谢。我需要获取的结果为date_format(df[date_key] , 'YYYY-MM')
格式,之后没有日期或时间戳。
答案 0 :(得分:2)
您可以使用date_trunc
降低时间戳的精度:
df = spark.createDataFrame([['2020-09-30'], ['2020-11-11']], ['date'])\
.select(to_date(col('date'), 'yyyy-MM-dd').alias('date_key'))
df.show()
+----------+
| date_key|
+----------+
|2020-09-30|
|2020-11-11|
+----------+
然后截断:
df.select(f.date_trunc('mm', col('date_key'))).show()
+------------------------+
|date_trunc(mm, date_key)|
+------------------------+
| 2020-09-01 00:00:00|
| 2020-11-01 00:00:00|
+------------------------+
date_trunc
将保留指定格式的精度,在这种情况下,mm
表示月份。