我有一个在单节点上运行良好的小型 Scala 程序。但是,我正在扩展它,以便它在多个节点上运行。这是我的第一次这样的尝试。我只是想了解 RDD 在 Spark 中是如何工作的,所以这个问题是基于理论的,可能不是 100% 正确的。
假设我创建了一个 RDD:
val rdd = sc.textFile(file)
现在,一旦我这样做了,这是否意味着文件file
现在跨节点分区(假设所有节点都可以访问文件路径)?
其次,我想计算 RDD 中的对象数量(足够简单),但是,我需要在需要应用于 RDD 中的对象的计算中使用该数字 - 一个伪代码示例:
rdd.map(x => x / rdd.size)
假设有 100 个对象rdd
,假设有 10 个节点,因此每个节点计数 10 个对象(假设这是 RDD 概念的工作原理),现在当我调用该方法时,每个节点将使用rdd.size
as执行计算10
还是100
?因为,总体而言,RDD 是大小100
,但在每个节点上本地它只是10
. 在进行计算之前,我是否需要制作广播变量?这个问题与下面的问题有关。
最后,如果我对 RDD 进行转换,例如rdd.map(_.split("-"))
,然后我想要新size
的 RDD,我是否需要对 RDD 执行操作,例如count()
,以便将所有信息发送回驱动节点?