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