将 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))
感谢大家的帮助和提示。
我尝试动态连接字段,基于一些配置设置,目标是拥有一个具有 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))
感谢大家的帮助和提示。