我应该将广播变量或 broadcast.value() 传递到我的 RDD[自定义对象] 中吗?
Should I pass the broadcast variable or broadcast.value() into my RDD[custom object]?
我有一些相当大的列表,我需要在构成我的 RDD 的每个对象中访问它们。因此,在我广播这些列表之后,我应该将广播变量或 broadcast.value() 传递到每个对象中吗?我不希望为每个对象复制列表,但每个对象都能够使用列表。我的代码看起来像这样:
class foo(object):
def __init__(self, number, broadcasted)
self.NUMBER = number
self.BROADCASTED = broadcasted
broadcasted_list = sc.broadcast([a, b, c, ...])
所以我应该将 RDD 创建为
rdd = sc.parallelize([1, 2, 3]).map(lambda x: foo(x, broadcasted_list))
或
rdd = sc.parallelize([1, 2, 3]).map(lambda x: foo(x, broadcasted_list.value()))
谢谢!
取决于您希望 self.BROADCASTED
包含的内容。我假设您已针对此示例简化了方法 foo
,但正因为如此,尚不清楚 foo
的目的是什么。
如果您希望它包含 [a,b,c,..]
,则执行 broadcasted_list.value()
。
如果您希望该变量包含对广播对象的引用,请传入 broadcasted_list
。
假设您需要列表中的值来执行进一步的计算,您会想要使用 broadcasted_list.value()
。我想你会发现,如果你传入 broadcasted_list
,你最终只会得到一个对象的引用,看起来像这样:<pyspark.broadcast.Broadcast object at 0x1f36f50>
.
我有一些相当大的列表,我需要在构成我的 RDD 的每个对象中访问它们。因此,在我广播这些列表之后,我应该将广播变量或 broadcast.value() 传递到每个对象中吗?我不希望为每个对象复制列表,但每个对象都能够使用列表。我的代码看起来像这样:
class foo(object):
def __init__(self, number, broadcasted)
self.NUMBER = number
self.BROADCASTED = broadcasted
broadcasted_list = sc.broadcast([a, b, c, ...])
所以我应该将 RDD 创建为
rdd = sc.parallelize([1, 2, 3]).map(lambda x: foo(x, broadcasted_list))
或
rdd = sc.parallelize([1, 2, 3]).map(lambda x: foo(x, broadcasted_list.value()))
谢谢!
取决于您希望 self.BROADCASTED
包含的内容。我假设您已针对此示例简化了方法 foo
,但正因为如此,尚不清楚 foo
的目的是什么。
如果您希望它包含 [a,b,c,..]
,则执行 broadcasted_list.value()
。
如果您希望该变量包含对广播对象的引用,请传入 broadcasted_list
。
假设您需要列表中的值来执行进一步的计算,您会想要使用 broadcasted_list.value()
。我想你会发现,如果你传入 broadcasted_list
,你最终只会得到一个对象的引用,看起来像这样:<pyspark.broadcast.Broadcast object at 0x1f36f50>
.