gpt4 book ai didi

scala - 在不同的类中访问 Spark 广播变量

转载 作者:行者123 更新时间:2023-12-04 19:30:45 25 4
gpt4 key购买 nike

我正在 Spark Streaming 应用程序中广播一个值。但是我不确定如何在与广播它的类不同的类中访问该变量。

我的代码如下所示:

object AppMain{
def main(args: Array[String]){
//...
val broadcastA = sc.broadcast(a)
//..
lines.foreachRDD(rdd => {
val obj = AppObject1
rdd.filter(p => obj.apply(p))
rdd.count
}
}

object AppObject1: Boolean{
def apply(str: String){
AnotherObject.process(str)
}
}
object AnotherObject{
// I want to use broadcast variable in this object
val B = broadcastA.Value // compilation error here
def process(): Boolean{
//need to use B inside this method
}
}

谁能建议在这种情况下如何访问广播变量?

最佳答案

这里没有特别针对 Spark 的内容,忽略可能的序列化问题。如果你想使用某个对象,它必须在当前范围内可用,你可以像往常一样实现这一点:

  • 您可以在已经定义广播的范围内定义您的助手:
    {
    ...
    val x = sc.broadcast(1)
    object Foo {
    def foo = x.value
    }
    ...
    }
  • 您可以将其用作构造函数参数:
    case class Foo(x: org.apache.spark.broadcast.Broadcast[Int]) {
    def foo = x.value
    }

    ...

    Foo(sc.broadcast(1)).foo
  • 方法参数
    case class Foo() {
    def foo(x: org.apache.spark.broadcast.Broadcast[Int]) = x.value
    }

    ...

    Foo().foo(sc.broadcast(1))
  • 甚至像这样混入你的助手:
    trait Foo {
    val x: org.apache.spark.broadcast.Broadcast[Int]
    def foo = x.value
    }

    object Main extends Foo {
    val sc = new SparkContext("local", "test", new SparkConf())
    val x = sc.broadcast(1)

    def main(args: Array[String]) {
    sc.parallelize(Seq(None)).map(_ => foo).first
    sc.stop
    }
    }
  • 关于scala - 在不同的类中访问 Spark 广播变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36642943/

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