首页 > 解决方案 > 如何在pyspark中将字符串转换为日期而不显示日期?

问题描述

我有一列的值如“2018 年 1 月”、“2019 年 3 月”、“2016 年 12 月”。我想将其转换为日期类型(MMM yyyy)。当我使用 pyspark 执行此操作时,数据框结果也包括日期(2018,1,1)。如何摆脱日期?

from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf
from pyspark.sql.functions import to_date


conf = SparkConf().setMaster("local").setAppName("Date")
sc=SparkContext(conf=conf)
spark=SparkSession(sc)


df = spark.createDataFrame([('Jan 2018',)], ['Month_Year'])
df1 = df.select(to_date(df.Month_Year, 'MMM yyyy').alias('dt')).collect()

print(df1)

输出:dt=datetime.date(2018,1,1)

我的预期输出是 (2018,1) 或 (Jan 2018) 或 (1,2018) 即只有月份和年份

标签: datetimepyspark

解决方案


to_date函数将字符串/时间戳/日期类型转换为yyyy-MM-dd格式。

对于您预期的结果,请使用date_format()函数来指定格式。

print(df.select(date_format(to_date(df.Month_Year, 'MMM yyyy'),"yyyy,MM").alias('dt')).collect())
#[Row(dt=u'2018,01')]

print(df.select(date_format(to_date(df.Month_Year, 'MMM yyyy'),"M,yyyy").alias('dt')).collect())
#[Row(dt=u'1,2018')]

print(df.select(date_format(to_date(df.Month_Year, 'MMM yyyy'),"MMM yyyy").alias('dt')).collect())
#[Row(dt=u'Jan 2018')]

推荐阅读