繁体   English   中英

Apache Spark Broadcast变量的类型为Broadcast? 不是RDD吗?

[英]Apache Spark Broadcast variables are type Broadcast? Not a RDD?

只是想澄清一些问题,一些悬而未决的问题,这个问题是通过在另一个问题中观察用户而产生的,该问题试图对广播变量调用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表示形式创建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使用Broadcasts的一些信息,我假设它调用了底层的Scala类,并将其存储为引擎盖下的Scala Broadcast类型。

广播变量不是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)))

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

我希望这有帮助!

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

编辑2:

稍微深入了解一下广播变量实际上是什么:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM