gpt4 book ai didi

apache-spark - 在 PySpark 中向 rdd 广播字典

转载 作者:行者123 更新时间:2023-12-03 11:55:25 28 4
gpt4 key购买 nike

我刚刚掌握了 Spark,我有需要映射到 rdd 的函数,但使用全局字典:

from pyspark import SparkContext

sc = SparkContext('local[*]', 'pyspark')

my_dict = {"a": 1, "b": 2, "c": 3, "d": 4} # at no point will be modified
my_list = ["a", "d", "c", "b"]

def my_func(letter):
return my_dict[letter]

my_list_rdd = sc.parallelize(my_list)

result = my_list_rdd.map(lambda x: my_func(x)).collect()

print result

以上给出了预期的结果;但是,我真的不确定我对全局变量 my_dict 的使用。 .似乎每个分区都制作了字典的副本。而且感觉不太对劲..

它看起来像 broadcast是我正在寻找的。但是,当我尝试使用它时:
my_dict_bc = sc.broadcast(my_dict)

def my_func(letter):
return my_dict_bc[letter]

我收到以下错误:
TypeError: 'Broadcast' object has no attribute '__getitem__

这似乎意味着我不能广播字典。

我的问题:如果我有一个使用全局字典的函数,则需要映射到 rdd ,正确的做法是什么?

我的例子很简单,但实际上 my_dictmy_list大得多,而且 my_func更复杂。

最佳答案

您忘记了关于 Broadcast 的重要信息对象,它们有一个名为 value 的属性数据存储在哪里。

因此需要修改my_func像这样:

my_dict_bc = sc.broadcast(my_dict)

def my_func(letter):
return my_dict_bc.value[letter]

关于apache-spark - 在 PySpark 中向 rdd 广播字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770720/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com