PySpark仅保留日期和年份

时间:2020-09-30 07:15:14

标签: dataframe date apache-spark pyspark apache-spark-sql

我有一个带有日期类型的列date_key的数据框。问题是我想创建仅包含yyyy-mm的{​​{1}}部分的另一列,但仍保留其日期类型。我尝试了date_key,但该方法无效。还尝试了(to_date(df[date_key],'YYYY-MM'),但结果是字符串而不是日期类型。有人可以帮忙吗?非常感谢。我需要获取的结果为date_format(df[date_key] , 'YYYY-MM')格式,之后没有日期或时间戳。

1 个答案:

答案 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表示月份。