如何在pyspark中将字符串转换为Date而不显示日期?

时间:2020-05-01 16:06:36

标签: datetime pyspark

我有一列,其值类似于“ Jan 2018”,“ Mar 2019”,“ Dec 2016”。我想将其转换为日期类型(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)或(2018年1月)或(1,2018),即仅月份和年份

1 个答案:

答案 0 :(得分:0)

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')]