所以我想知道是否有可能用pyspark转换一年中随机的一天( 0-365 )至 day-month 格式。在我的例子中,输入是一个字符串。例子:输入: "091" 预期产量(月日): "0331"
0-365
day-month
"091"
"0331"
wnrlj8wa1#
这是可能的,但你也需要一年。将年份转换为日期(该年的第一个一月)并添加天数以获得所需的结果,然后设置格式。下面是一个有效的例子
from pyspark.sql import functions as F df = spark.createDataFrame([("2020", "091")], ["year", "day_of_year"]) df1 = df.withColumn( "first_day_year", F.concat_ws("-", "year", F.lit("01"), F.lit("01")) ).withColumn( "day_month", F.date_format( F.expr("date_add(first_day_year, cast(day_of_year as int) -1)"), "MMdd" ) ).drop("first_day_year") df1.show() # +----+-----------+---------+ # |year|day_of_year|day_month| # +----+-----------+---------+ # |2020| 091| 0331| # +----+-----------+---------+
8wtpewkr2#
你可以用 date_add 给元旦加上天数。
date_add
import pyspark.sql.functions as F df2 = df.withColumn( 'day_month', F.expr("date_format(date_add('2020-01-01', int(day - 1)), 'MMdd')") ) df2.show() +---+---------+ |day|day_month| +---+---------+ | 91| 0331| +---+---------+
请注意,结果将根据是否是闰年而有所不同。
2条答案
按热度按时间wnrlj8wa1#
这是可能的,但你也需要一年。将年份转换为日期(该年的第一个一月)并添加天数以获得所需的结果,然后设置格式。
下面是一个有效的例子
8wtpewkr2#
你可以用
date_add
给元旦加上天数。请注意,结果将根据是否是闰年而有所不同。