【发布时间】:2020-05-06 01:00:24
【问题描述】:
:)
我想说我是 Spark 的新手,因为其中许多帖子都开始了。但事实是我并不是那么新。 尽管如此,我仍然面临广播变量的这个问题。
当一个变量被广播时,每个执行器都会收到一份它的副本。稍后,当在执行器中执行的代码部分(比如说map或foreach)中引用该变量时,如果未将驱动程序中设置的变量引用传递给它,则执行器不知道是什么我们在谈论吗?我认为这是完美的解释here
我的问题是我得到了一个 nullPointerException,即使我将广播引用传递给了执行程序。
class A {
var broadcastVal: Broadcast[Dataframe] = _
...
def method1 {
broadcastVal = otherMethodWhichSendBroadcast
doSomething(broadcastVal, others)
}
}
class B {
def doSomething(...) {
forEachPartition {x => doSomethingElse(x, broadcasVal)}
}
}
object C {
def doSomethingElse(...) {
broadcastVal.value.show --> Exception
}
}
我错过了什么?
提前致谢!
【问题讨论】:
标签: apache-spark apache-spark-sql