Spark RDD-它们如何工作

怪物

我有一个小的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.sizeas来执行计算10还是100因为总体而言,RDD是大小,100但在每个节点上本地是10在进行计算之前,我需要做一个广播变量吗?该问题与以下问题相关。

最后,如果我对RDD进行了转换(例如)rdd.map(_.split("-")),然后想要sizeRDD的新版本,是否需要对RDD执行操作(例如)count(),以便将所有信息发送回驱动程序节点?

阿沙林德

通常,文件(或文件的一部分,如果太大)将被复制到群集中的N个节点(HDFS上默认为N = 3)。并不是要在所有可用节点之间分割每个文件。

但是,对于您(即客户端)使用Spark使用文件应该是透明的-rdd.size无论拆分和/或复制了多少个节点,您都不会看到的差异有一些方法(至少在Hadoop中),可以确定当前文件可以位于哪些节点(部分)上。但是,在简单的情况下,您很可能不需要使用此功能。

更新:描述RDD内部的文章:https : //cs.stanford.edu/~matei/papers/2012/nsdi_spark.pdf

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章