Spark 2.4 Python环境下如何动态拼接多语言字段生成新列
动态多语言字段拼接实现方案
使用Spark内置的concat_ws函数即可实现任意数量语言的动态拼接,无需手动判断语言列表长度,适配Spark 2.4 + Python 3环境,修改后代码如下:
from pyspark.sql import functions as F language = "JP;EN" language = [item.strip() for item in language.split(";")] # 校验多语言字段是否存在 for lang in language: doc_lang = f"doctor.name_{lang}" if doc_lang not in case_df.columns: # 修复原代码笔误:原变量名为case_df_final,后续拼接使用的是case_df,此处统一变量 case_df = AddColumn(case_df, doc_lang) ### 动态合并多语言翻译 # 批量生成要拼接的多语言列列表 lang_cols = [F.col(f"doctor.name_{lang}") for lang in language] case_df = case_df.withColumn( "doctor", # concat_ws自动适配列数量:1列直接返回值,多列自动用指定分隔符拼接 F.concat_ws(" // ", *lang_cols) )
逻辑说明
concat_ws第一个参数为拼接分隔符,后续传入要拼接的列对象即可,自动适配传入的列数量:- 仅配置1种语言时,直接返回对应列的取值,不会额外添加分隔符
- 配置2种及以上语言时,按照语言列表的顺序拼接所有对应字段,分隔符为指定的
//
- 该函数会自动跳过值为null的列,不会产生多余的空分隔符,兼容性优于手动拼接
concat函数的实现。
内容的提问来源于stack exchange,提问作者Tobias Bruckert
相关产品推荐
相关产品推荐

