使用PySpark将列表中的值映射到新值

问题描述

我正在尝试使用Pyspark重新创建值列表以创建新列。我已经使用嵌套字典设置了映射,但是无法弄清楚映射语法。原始数据具有几个字符串值,需要将其重新编码为新值,然后我要为该列提供一个新名称。原始列值将通过几种不同的方式进行分组,以创建不同的新列。

df将具有数千列,因此我需要代码尽可能地高效。

我在1-1映射中有另一种情况,我可以使用以下方式创建表达式:

#expr = [ create_map([lit(x) for x in chain(*values.items())])[orig_df[key]].cast(IntegerType()).alias('new_name') for key,values in my_dict.items() if key in orig_df.columns]

我只是想不出将多对一映射的语法。

这是我尝试过的:

grouping_dict = {'orig_col_n':{'new_col_n_a': {'20':['011','012'.'013'],'30':['014','015','016']},'new_col_n_b': {'25':['011','013','015'],'35':['012','014','016']}}}

expr = [ f.when(f.col(key) == f.lit(old_val),f.lit(new_value))
    .cast(IntegerType())
    .alias(new_var_name) 
    for key,new_var_names_dict in grouping_dict.items()
    for new_var_name,mapping_dict in new_var_names_dict.items()
    for new_value,old_value_list in mapping_dict.items()
    for  old_val in old_value_list 
    if key in original_df.columns]
                  

new_df = original_df.select(*expr)  

这个表达式不太正确,它创建多个具有相同名称的列,因为它循环遍历需要映射的值。

任何有关重组字典或如何修复语法的建议将不胜感激!

enter image description here

enter image description here

orig_col_n new_col_n_a new_col_n_b
011 20 25
012 20 35
013 20 25
014 30 35
015 30 25
016 30 35

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...