You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks中用PySpark的.isin分类数据时全标记UNKNOWN的问题

PySpark中edu_level标记错误的问题解决

错误原因

你的代码用isin()判断整个edu_hist字符串是否完全等于列表中的单个值,但edu_hist是逗号分隔的多字符组合(比如, , T, 3, 6),和单个字符完全不匹配,导致所有条件都不触发,最终返回UNKNOWN。

你的需求是:只要edu_hist中包含某组的任意字符,就标记对应教育等级,且按when的顺序优先匹配(比如id123的edu_hist包含T、3、6,优先匹配COLLEGE DEGREE)。

解决方案

需要检查edu_hist中是否包含目标组的任意字符,而不是完全匹配。以下两种方法都可以实现:

方法1:正则匹配(rlike)

用正则表达式精准匹配单个字符,避免误判:

import pyspark.sql.functions as F

df = df.withColumn('edu_level', 
    # 匹配GRADUATE DEGREE对应的字符
    F.when(F.col('edu_hist').rlike(r'(^|, )(7|8|9|Z)(, |$)'), 'GRADUATE DEGREE')
     # 匹配COLLEGE DEGREE对应的字符
     .when(F.col('edu_hist').rlike(r'(^|, )(5|6|W|X|Y)(, |$)'), 'COLLEGE DEGREE')
     # 匹配SOME COLLEGE对应的字符
     .when(F.col('edu_hist').rlike(r'(^|, )(3|4|V)(, |$)'), 'SOME COLLEGE')
     # 匹配HIGH SCHOOL OR EQUIVALENT对应的字符
     .when(F.col('edu_hist').rlike(r'(^|, )(S|T|U)(, |$)'), 'HIGH SCHOOL OR EQUIVALENT')
     # 匹配OTHER对应的字符
     .when(F.col('edu_hist').rlike(r'(^|, )(0|1|2|N|O|P|Q|R)(, |$)'), 'OTHER')
     .otherwise('UNKNOWN')
)

正则说明:(^|, )匹配字符串开头或逗号加空格,(字符组)匹配目标字符,(, |$)匹配逗号加空格或字符串结尾,确保只匹配独立的单个字符。

方法2:拆分数组+交集判断

先把edu_hist拆分成数组,再判断和目标组的交集:

import pyspark.sql.functions as F

# 拆分edu_hist为数组,过滤掉空字符串
split_edu_col = F.array_remove(F.split(F.col('edu_hist'), ', '), '')

df = df.withColumn('edu_level', 
    F.when(F.size(F.array_intersect(split_edu_col, F.array('7','8','9','Z'))) > 0, 'GRADUATE DEGREE')
     .when(F.size(F.array_intersect(split_edu_col, F.array('5','6','W','X','Y'))) > 0, 'COLLEGE DEGREE')
     .when(F.size(F.array_intersect(split_edu_col, F.array('3','4','V'))) > 0, 'SOME COLLEGE')
     .when(F.size(F.array_intersect(split_edu_col, F.array('S','T','U'))) > 0, 'HIGH SCHOOL OR EQUIVALENT')
     .when(F.size(F.array_intersect(split_edu_col, F.array('0','1','2','N','O','P','Q','R'))) > 0, 'OTHER')
     .otherwise('UNKNOWN')
)

逻辑说明:拆分后过滤空值,再用array_intersect判断和目标数组是否有重叠元素,有则触发对应条件。

两种方法都能得到你预期的输出结果:

idedu_histedu_level
123, , T, 3, 6COLLEGE DEGREE
456, 7, X, 4, ,GRADUATE DEGREE
789, 3, S, 2, ,SOME COLLEGE

内容的提问来源于stack exchange,提问作者carousallie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:04:58