【问题标题】:Should I pass the broadcast variable or broadcast.value() into my RDD[custom object]?我应该将广播变量或broadcast.value() 传递到我的RDD [自定义对象] 中吗?
【发布时间】:2016-06-07 18:34:26
【问题描述】:

我需要在组成我的 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()))

谢谢!

【问题讨论】:

  • 你弄明白了吗?我的解决方案对您有用吗?
  • 是的,谢谢!我只是传入广播变量并在需要时调用对象引用的值。

标签: python apache-spark pyspark broadcast


【解决方案1】:

取决于您希望 self.BROADCASTED 包含的内容。我假设你已经为这个例子简化了你的方法foo,但因此不清楚foo的目的是什么。

如果您希望它包含[a,b,c,..],则执行broadcasted_list.value()

如果您希望该变量包含对广播对象的引用,请传入broadcasted_list

假设您需要列表中的值来执行进一步的计算,您可能希望使用broadcasted_list.value()。我想你会发现如果你传入broadcasted_list,你最终只会得到一个对对象的引用,看起来像这样:<pyspark.broadcast.Broadcast object at 0x1f36f50>

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 2012-12-10
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多