python - 在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 条件匹配时
谢谢
解决方案
你可以这样做
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 和我们进行比较的列表。
推荐阅读
- sql - SQL查询检测累积值何时达到限制
- spring - 如何从 Spring Boot 控制器向另一台服务器执行 http 请求
- java - 如何在嵌套对象中使用 Criteria Mongotemplate 获取列表数据
- c++ - 我不明白为什么我的 pthread 冻结
- python - 创建具有多项选择 Python 的票证
- recursion - 是否可以在 DFS 的递归求解问题中来回移动迭代器?
- java - 无法为 JRadioButton 创建和设置图标
- r - 如何在 R studio 中分配任何 Gb 的向量大小
- android - 如何在我的 android 应用程序中仅启用英文键盘?
- apache-spark - 原因:java.lang.Exception:您不能在 Spark 闭包中使用 GraphFrame 对象