【问题标题】:Pyspark Getting the last date of the previous quarter based on Today's DatePyspark 根据今天的日期获取上一季度的最后日期
【发布时间】:2021-01-09 21:15:35
【问题描述】:

在使用 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

任何帮助将不胜感激。

【问题讨论】:

  • “我试图在代码仓库中创建一个数据框,但没有成功” - 嘿,下次,如果你说 如何,会更容易帮助你> 它没有工作。您是否收到了错误消息,是否给您提供了错误的日期,还是有其他错误?

标签: pyspark palantir-foundry foundry-code-workbooks foundry-code-repositories


【解决方案1】:

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

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 参数传递到您的转换中,并且您可以使用底层spark_session 变量直接生成pyspark.sql.DataFrame

如果您的输入中已有可用的日期列,您只需确保它是 Date 类型,以便 F.date_trunc 调用适用于正确的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多