如何处理DataFrame中-分隔多错误码并适配现有UDF生成对应字段
适配多错误码场景的Spark DataFrame代码修改方案
原有Spark DataFrame的errorCode列仅存储单个错误码,通过resolveErrorTypeUDF、resolveErrorDescUDF两个UDF生成对应errorType和errorDescription字段。现在errorCode支持存储单个或多个以-分隔的错误码,需生成对应以-分隔的errorType和errorDescription字段,isSuccessful字段逻辑保持(非空则为N)。
修改后完整代码
from pyspark.sql.functions import col, split, transform, concat_ws, when, trim errorFinalDf = errorDfAll.na.fill("") \ .withColumn("errorCodeArr", split(col("errorCode"), "-")) \ .withColumn("errorType", concat_ws("-", transform(col("errorCodeArr"), lambda x: resolveErrorTypeUDF(x)))) \ .withColumn("errorDescription", concat_ws("-", transform(col("errorCodeArr"), lambda x: resolveErrorDescUDF(x)))) \ .withColumn("isSuccessful", when(trim(col("errorCode")).eqNullSafe(""), "Y").otherwise("N")) \ .drop("errorCodeArr") \ .dropDuplicates()
关键修改说明
- 拆分错误码数组:用
split(col("errorCode"), "-")将多错误码拆分为数组,兼容单个错误码场景(拆分后数组长度为1) - 批量映射字段:通过
transform函数遍历错误码数组,对每个元素调用原有UDF,实现批量转换逻辑 - 拼接结果字符串:用
concat_ws("-", ...)将转换后的数组重新拼接为以-分隔的字符串,与输入格式对齐 - 清理中间字段:添加
drop("errorCodeArr")移除临时数组字段,保持DataFrame结构简洁 - 保留原有逻辑:
isSuccessful的判断逻辑和dropDuplicates()操作完全保留
内容的提问来源于stack exchange,提问作者SDS
相关产品推荐
相关产品推荐

