我想创建一个函数,该函数以日期作为输入,然后使用用户提供的日期作为其开始,将月级别的数据框过滤为仅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月'>”
1条答案
按热度按时间fcwjkofz1#
St_date是一个字符串,但是pyspark to_date函数需要一个列。你可以通过执行to_date(pyspark.sql.functions.lit(st_date))来解决这个问题,或者通过使用Python的datetime模块找到end_date,然后使用datetime对象进行过滤。