我基本上有一個要求,需要一列作為 PeriodEndDate 。期間總是在每月的 23 日結束。
在這種情況下,我需要從列中獲取日期,它是每天該月的最后一天,并將該日期的“天”設定為“23”。
我嘗試過執行以下操作:
.withColumn("periodEndDate", change_day(jsonDF2.periodDate, sf.lit(23)))
無法從“pyspark.sql.functions”匯入名稱“change_day”
uj5u.com熱心網友回復:
您可以使用make_date
from pyspark.sql import functions as F
df = spark.createDataFrame([('2022-05-31',)], ['periodDate'])
df = df.withColumn('periodEndDate', F.expr("make_date(year(periodDate), month(periodDate), 23)"))
df.show()
# ---------- -------------
# |periodDate|periodEndDate|
# ---------- -------------
# |2022-05-31| 2022-05-23|
# ---------- -------------
uj5u.com熱心網友回復:
據我所知,沒有任何功能change_day,但是您可以使用 UDF 制作一個。通過 adate并替換day.
例子:
from datetime import datetime
from pyspark.sql import SparkSession
from pyspark.sql.types import TimestampType
from pyspark.sql import functions as F
def change_day(date, day):
return date.replace(day=day)
change_day = F.udf(change_day, TimestampType())
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([{"date": datetime(2022, 1, 31)}])
df = df.withColumn("23day", change_day(F.col("date"), F.lit(23)))
df.show(20, False)
結果:
------------------- -------------------
|date |23day |
------------------- -------------------
|2022-01-31 00:00:00|2022-01-23 00:00:00|
------------------- -------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491275.html
