Python PySpark:将字典数据附加到PySpark数据帧

Python PySpark:将字典数据附加到PySpark数据帧,python,pyspark,Python,Pyspark,我的问题的简化版本如下: 我有一个Spark数据框(“my_-df”),其中有一列(“col1”)和值'a'、'b'、'c'、'd' 还有这样一本字典(“我的字典”): {'a':5,'b':7,'c':2,'d':4} 我想将这些结合起来创建一个数据框,其中包含一个额外的列,该列包含来自我的dict的相应值 目前,我正在使用以下方法,它适用于小数据集,但效率非常低,并且会在我的完整数据集上导致StackOverflower错误 import pyspark.sql.functions as F

我的问题的简化版本如下:

我有一个Spark数据框(“my_-df”),其中有一列(“col1”)和值'a'、'b'、'c'、'd'

还有这样一本字典(“我的字典”): {'a':5,'b':7,'c':2,'d':4}

我想将这些结合起来创建一个数据框,其中包含一个额外的列,该列包含来自我的dict的相应值

目前,我正在使用以下方法,它适用于小数据集,但效率非常低,并且会在我的完整数据集上导致StackOverflower错误

import pyspark.sql.functions as F

# start with an arbitrary df containing "col1"
# initialise new column with zeros
my_df = my_df.withColumn('dict_data', F.lit(0))

for k,v in my_dict.items():
    my_df = my_df.withColumn('dict_data',
                             F.when((my_df['col1']==k),
                                     v).otherwise(df['dict_data'])
                             )

有更好的方法吗?我尝试过使用窗口函数,但在这种情况下很难应用它…

您只需要根据第一列的值将字典值映射到一个新列中。你可以参考:


您只需要根据第一列的值将字典值映射到新列中。你可以参考:


您可以使用中间数据帧和连接:

rows=[{'col1':key,'dict_data':value}对于key,my_dict.items()中的value]
my_dict_df=rdd.parallelize(行).toDF()
result_df=my_df.join(my_dict_df,'col1','left')

您可以使用中间数据帧和连接:

rows=[{'col1':key,'dict_data':value}对于key,my_dict.items()中的value]
my_dict_df=rdd.parallelize(行).toDF()
result_df=my_df.join(my_dict_df,'col1','left')