pyspark-将一年中的某一天转换为日/月格式

tuwxkamq  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(358)

所以我想知道是否有可能用pyspark转换一年中随机的一天( 0-365 )至 day-month 格式。在我的例子中,输入是一个字符串。
例子:
输入: "091" 预期产量(月日): "0331"

wnrlj8wa

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|

# +----+-----------+---------+
8wtpewkr

8wtpewkr2#

你可以用 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|
+---+---------+

请注意,结果将根据是否是闰年而有所不同。

相关问题