Spark RDD持久化疑问:未重分配的A能否复用B的持久化数据?
Spark RDD持久化复用问题解答
会复用B已持久化到内存或磁盘中的数据,原因如下:
- RDD的本质是不可变实例:Spark里的RDD是不可变的分布式数据集,代码中
JavaPairRDD A = B只是让变量A成为RDD实例B的一个引用,二者指向同一个底层RDD对象。 - persist作用于RDD实例而非变量:调用
B.persist(...)是给这个RDD实例打上持久化标记,告诉Spark后续计算时要保留该RDD的计算结果,这个标记绑定在RDD实例上,和变量名无关。 - 未重分配时A仍指向原RDD:只要A没有被重新赋值为其他RDD的转换结果,对A执行任何转换操作,本质都是操作那个已经被标记持久化的RDD实例,Spark会自动复用之前持久化存储的数据,无需重新计算上游依赖。
示例代码回顾:
JavaPairRDD A = B; B.persist(StorageLevel.MEMORY_AND_DISK());
内容的提问来源于stack exchange,提问作者zero_yu
相关产品推荐
相关产品推荐

