首页 > 解决方案 > 在pyspark中使用带有case when语句的isin时出错

问题描述

我试图在 pyspark 中运行表达式,但无法运行它,请帮助我在使用 .isin 运算符时使用这个案例。

-> geo_region1 是新列,geo_region 是包含数据的现有列(BD','BT','BN','KH','CN','TW','HK','IN','ID', 'JP','KP','KR','LA','MY','MV','MN','MM')

DF2 = df2.withColumn("geo_region1", expr("case when(LOWER(geo_region).isin ('BD','BT','BN','KH','CN','TW','HK','IN','ID','JP','KP','KR','LA','MY','MV','MN','MM')) then 'APAC' end"))

结果:geo_region1 = APAC 条件匹配时

谢谢

标签: pythonpyspark

解决方案


你可以这样做

import pyspark.sql.functuons as f
Li = ['BD','BT','BN','KH','CN','TW','HK','IN','ID','JP','KP','KR','LA','MY','MV','MN','MM']
DF2 = df2.withColumn("geo_region1",f.when(f.upper(f.col('geo_region')).isin(Li), f.lit('APAC') ).when(f.upper(f.col('geo_region')).isin(Li2), f.lit('EMEA') ).when(f.upper(f.col('geo_region')).isin(Li3), f.lit('US') ).otherwise(f.lit('unknown'))

Li2 和 Li3 将是您要分别与 EMEA 和我们进行比较的列表。


推荐阅读