我有一个字符串列表,我将其转换为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上调用
cache
或persist
另行声明。 RDD将仅在内存中计算。