我有一列,其值类似于“ 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),即仅月份和年份
答案 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')]