datetime - 如何在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) 即只有月份和年份
解决方案
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')]