我有一个字符串列表,我将其转换为RDD:-

JavaRDD<String> stringRDD = jsc.parallelize(strings,5);


根据我的理解,当我们执行jsc.textFile(filename,5)时,每个从节点将解析它们的各个部分(例如,来自S3),并将RDD存储在其内存中。

parallelize()的行为是什么?整个列表是否传递到每个从节点?

最佳答案

在行中:

JavaRDD<String> stringRDD = jsc.parallelize(strings,5);


第二个参数5表示要为stringRDD创建的分区数。如果您有5个工作人员,他们将分别获得一个分区来工作,并执行您在代码中执行的任何操作。

如果您的列表strings的元素少于5个,则一个分区很可能为空,并且该分区所在的工作线程将处于空闲状态。


  然后每个从属节点将解析其各个部分(例如从S3开始),并将RDD存储在其内存中


每个从属节点将解析其分区,但不会将结果的RDD存储在内存中,除非通过在结果的RDD上调用cachepersist另行声明。 RDD将仅在内存中计算。

10-06 07:07