Pyspark根据今天的日期获取上一季度的最后一个日期

问题描述

一个使用pyspark的代码库中,我试图使用今天的日期,因此我需要检索上一季度的最后一天。然后,该日期将用于过滤数据框中的数据。我试图在代码库中创建一个数据框,但没有用。我的代码在“代码工作簿”中有效。这是我的代码工作簿代码

import datetime as dt
import pyspark.sql.functions as F


def unnamed():
    date_df = spark.createDataFrame([(dt.date.today(),)],['date'])
    date_df = date_df \
        .withColumn('qtr_start_date',F.date_trunc('quarter',F.col('date'))) \
        .withColumn('qtr_date',F.date_sub(F.col('qtr_start_date'),1))

    return date_df

任何帮助将不胜感激。

解决方法

我在代码库中成功运行了以下代码:

from transforms.api import transform_df,Input,Output
import datetime as dt
import pyspark.sql.functions as F


@transform_df(
    Output("/my/output/dataset"),)
def my_compute_function(ctx):
    date_df = ctx.spark_session.createDataFrame([(dt.date.today(),)],['date'])
    date_df = date_df \
        .withColumn('qtr_start_date',F.date_trunc('quarter',F.col('date'))) \
        .withColumn('qtr_date',F.date_sub(F.col('qtr_start_date'),1))

    return date_df

您需要将ctx参数传递到转换中,并且可以直接使用基础pyspark.sql.DataFrame变量来制作spark_session

如果输入中已经有日期列,则只需确保它是Date类型,以便F.date_trunc调用可以在正确的类型上运行。