将 1 到 n 项连接到新的火花列中

Concat 1 to n items into new spark column

我尝试动态连接字段,基于一些配置设置,目标是拥有一个具有 1 到 n 个字段合并值的新字段。

language = "JP;EN"
language = list(str(item) for item in language.split(";"))
no_langs = len(language)

# check if columns for multi-language exists
for lang in language:
   doc_lang = "doctor.name_" + lang
   if doc_lang not in case_df.columns:
      case_df_final = AddColumn(case_df, doc_lang)

### combine translations of masterdata
case_df = case_df.withColumn(
   "doctor",
    F.concat(
       F.col(("doctor.name_" + language[0])),
       F.lit(" // "),
       F.col(("doctor.name_" + language[1])),
  ),
)

我想要实现的是新列是动态的,具体取决于配置的语言数量。例如。如果只使用一种语言,结果会是这样。

case_df = case_df.withColumn(
   "doctor",
    F.col(("doctor.name_" + lang[0]))
)

对于 2 种或更多语言,它应该根据列表中的顺序选择所有语言。 谢谢你的帮助。 我正在使用 Spark 2.4。 Python 3

预期输出如下

最终工作代码如下:

# check if columns for multi-language exists
for lang in language:
    doc_lang = "doctor.name_" + lang
    if doc_lang not in case_df.columns:
        case_df = AddColumn(case_df, doc_lang)
    doc_lang_new = doc_lang.replace(".", "_")
    case_df = case_df.withColumnRenamed(doc_lang, doc_lang_new)

doc_fields = list(map(lambda k: "doctor_name_" + k, language))
case_df = case_df.withColumn("doctor", F.concat_ws(" // ", *doc_fields))

感谢大家的帮助和提示。