我有一个关于合并的问题。目前尚不清楚它的副作用。我有以下RDD:
JavaRDD<String> someStrings = //...
JavaRDD<String> coalescedStrings = someStrings.coalesce(100, false); //descreasing
Run Code Online (Sandbox Code Playgroud)
那么,实际发生了什么?如果我进行someStrings
一些操作会影响coalescedStrings
吗?
那么,实际发生了什么?
首先,由于coalesce
是Spark 转换(并且所有转换都是lazy),所以什么也没有发生。没有读取数据,也没有对该数据采取任何操作。发生了什么-创建了一个新的 RDD(这是分布式数据的驱动程序端抽象)。这个新的RDD是一组用于读取/转换数据的指令someStrings
,与称为的指令集相同,不同之处在于它包含一个“指令”:将数据重新划分为100个分区。该新RDD(coalescedStrings
)上的操作/转换将使用100个分区(每个阶段将转换为100个任务)来执行任何处理,这与对someStrings
将使用原始分区计数。因此,两个RDD将包含相同的数据(如果对其进行操作),但是分区不同。
如果我进行
someStrings
一些操作会影响coalescedStrings
吗?
不,两个RDD完全*彼此独立-对一个RDD的操作不会影响另一个。someStrings
仍具有其原始分区数。
*这有一些例外,主要是在缓存方面:例如,如果在计算的任何阶段都已someStrings
缓存,并且您someStrings
在进行操作之前先进行操作coalescedStrings
-那么后续的操作coalescedStrings
将可以使用缓存的结果并继续从那里。
归档时间: |
|
查看次数: |
2200 次 |
最近记录: |