pyspark 创建将日期作为输入并使用它来筛选子框架的函数时出错

im9ewurl  于 12个月前  发布在  Spark
关注(0)|答案(1)|浏览(89)

我想创建一个函数,该函数以日期作为输入,然后使用用户提供的日期作为其开始,将月级别的数据框过滤为仅1年的记录。我的计划是确定距离用户提交的日期1年的日期,然后使用该日期与用户提交的日期一起过滤原始数据框。
我正在做下面的工作,但问题似乎是Pyspark想要操作多个框架,而不是单个对象?我能找到的关于这个主题的所有内容都是关于在一个更大的df中转换或创建整个列的。我想我需要用collect()来获得一个值,但我不确定。在这一点上,我假设用户提交的日期已经与该框架的格式相匹配(格式为2017-01-01的月度数据)。因此,例如,如果用户提交了“2017-01-01”,则所需的结果将是仅包含2017年记录的数据框。

def one_year_data(df, st_date):
    
    st_date = to_date(st_date)
    end_date = add_months(st_date, 12)

    df1 = df.filter((df.date < end_date) & (df.date >= st_date))

    return df1

字符串
我得到一个错误,“列'2022-07-01'不存在。”当我打印end_date我得到“列<$'add_months(to_date(2022-07-01),12月'>”

fcwjkofz

fcwjkofz1#

St_date是一个字符串,但是pyspark to_date函数需要一个列。你可以通过执行to_date(pyspark.sql.functions.lit(st_date))来解决这个问题,或者通过使用Python的datetime模块找到end_date,然后使用datetime对象进行过滤。

相关问题