【问题标题】:Apache Spark Broadcast variables are type Broadcast? Not a RDD?Apache Spark 广播变量是广播类型吗?不是RDD?
【发布时间】:2016-01-18 21:54:41
【问题描述】:

只是想澄清一些事情,一些容易得到的结果,一个问题是通过观察用户在另一个问题中尝试对广播变量调用 RDD 操作而产生的?不对吧?

问题是:Spark 广播变量不是 RDD,对吗?这是 Scala 中的集合,我没看错吗?

查看 Scala 文档:http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.broadcast.Broadcast

所以它具有创建时分配的任何子类型,传递给它的任何子类型?就像这是一个 Java ArrayList 一样,它会是一个整数的 ArrayList?所以

sc.broadcast([0,1,2]) 会在 scala-notation 中创建一个 Broadcast[Array[Int]]?

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

(我确实搜索了相当多的明确直截了当的答案,但它一定是一个太基本的问题,但理解起来很重要,谢谢。)

如果有一些关于 Python 对广播的作用的信息会很好但没必要,我假设它调用了底层的 Scala 类,并且在底层存储为 Scala 广播类型?

【问题讨论】:

  • 是的,它不是 rdd,它只是创建和销毁每个执行器上的所有数据。是的,python api 只是在下面调用 scala 代码。

标签: java python scala apache-spark


【解决方案1】:

广播变量不是 RDD,但也不一定是 scala 集合。本质上,您应该将广播变量视为每台机器本地的局部变量。每个工作人员都将拥有您广播的任何内容的副本,因此您无需担心将其分配给特定的 RDD 值。

使用 RDD 的最佳时间是当您有一个相当大的对象时,您将需要 RDD 中的大多数值。

一个例子是

val zipCodeHash:HashMap[(Int, List[Resident])] //potentially a very large hashmap
val BVZipHash = sc.broadcast(zipCodeHash)

val zipcodes:Rdd[String] = sc.textFile("../zipcodes.txt")

val allUsers = zipcodes.flatMap(a => BVZipHash.value((a.parseInt)))

在这种情况下,由于 hashmap 可能非常大,为 map 函数中的每个值创建一个新副本将非常浪费。

我希望这会有所帮助!

编辑:我的代码中有一些小错误

编辑2:

稍微深入了解广播变量的具体含义:

广播变量实际上是广播类型的变量,可以包含任何类(从 Int 到您创建的任何对象的任何内容)。它绝不是一个 scala 集合。广播类实际上所做的只是提供两种有效地将数据传输给所有工作人员以重新创建值的方法之一(内部 spark 有一个类似 bittorent 的 P2P 广播系统,尽管它也允许 http 传输,但我不确定当它发生时)。

有关广播变量是什么以及如何使用它的更多信息,我建议您查看此链接:

http://spark.apache.org/docs/latest/programming-guide.html#broadcast-variables

我也强烈建议您阅读这本书,因为它对我很有帮助:

http://shop.oreilly.com/product/0636920028512.do

【讨论】:

  • 我真的很欣赏这个答案,它几乎可以说是我可以点击接受按钮,如果你能具体定义广播变量实际上是什么?我认为这是一个 Scala 集合,这是正确的词吗?或者它只是我定义的任何东西,就像 int 一样简单?您可以提供具体定义的链接吗?我找不到它。但也许我不知道在哪里看 :) 否则很好地解释了实际用法
  • 我猜答案是类型是Broadcast?
  • 当然,让我将其添加到我的答案中。
  • 嗨@JimLohse,我添加了更多关于什么是广播变量的具体细节信息,如果您还有什么需要澄清的,请告诉我!
  • 很棒的书,通过我的大学,我可以通过 Safari Books Online 免费访问,再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多