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