错误:在DataFrame布尔表达式中使用PySpark的month和dayofmonth函数时出现ValueError

x33g5p2x  于 2023-08-03  发布在  Spark
关注(0)|答案(1)|浏览(133)

我想写一个函数,它将满足以下条件:-你试图实现的逻辑如下:
1.检查sddgl列的月份是否等于12,月份的日期是否等于26。
1.如果条件为真,则使用date_add函数向sddgl列添加一天,并使用新值更新sddgl列。
1.如果条件为false,则保持sddgl列不变。
我试着跟随:

def sales_logic(sales_data):

    if (f.month(sales_data["sddgl"]==12)) & (f.dayofmonth(sales_data["sddgl"]==26)):
        sales_data["sddgl"]=date_add(sales_data["sddgl"],1)
    else:
        sales_data["sddgl"]
    # group_by=sales_data.groupBy("sddcto","sddgl","aiac23","aiac23_udc","schnl","schnl_ecom","bu_schnl","bu_schnl_name",sdco)
    return sales_data

字符串
但是我得到了这个错误:- ValueError:无法将列转换为bool:请用'&'表示'和','|在构建DataFrame布尔表达式时,' for ' or ','~' for 'not'。
我该怎么解决呢?

p8h8hvxi

p8h8hvxi1#

不能像在pyspark中那样分配列。还有你的牙套也不对尝试使用when/otherwise结构:

sales_data = sales_data.withColumn("sddgl", 
    f.when(
        (f.month(sales_data["sddgl"])==12) & 
        (f.dayofmonth(sales_data["sddgl"])==26), date_add(sales_data["sddgl"],1)
    ).otherwise(sales_data["sddgl"])

字符串

相关问题