DF 中的 Pyspark if 语句

Pyspark if statement in DF

需要帮助来弄清楚如何对此进行编码。我有 2 个过滤器要在 Dataframe 中检查并分配值。

filters = "LIST_A in {0} AND LIST_B not in {1}".format(include_list,EXCLUDE_list) 

amount = "AND AMT_PD >= 10"

find_df = old_df.if(old_df.format(filters,amount)):
    old_df = old_df.withColumn("ID", F.lit('FOUND'))
            else:
                old_df = old_df.withColumn("ID", F.lit('NOT_FOUND'))

不确定这是否是您真正期望的,因为您仅提供了示例,但未指定任务描述:

if old_df.filter('{0} {1}'.format(filters, amount)).count() > 0:
  old_df = old_df.withColumn("ID", F.lit('FOUND'))
else:
  old_df = old_df.withColumn("ID", F.lit('NOT_FOUND'))

如果至少找到一个满足条件的记录,上面的示例将向数据框中添加另一列,所有列都具有相同的值。

或者,如果您想对每条记录执行检查 - 查询将如下所示:

old_df = old_df.withColumn("ID",
                           when(
                               (col('LIST_A').isin(include_list))
                                & ~(col('LIST_B').isin(EXCLUDE_list))
                                & (col('AMT_PD') >= 10),
                               'FOUND'
                           ).otherwise('NOT_FOUND')

ID 列将根据特定行的 LIST_A、LIST_B 和 AMT_PD 列中的值分别计算每条记录。