我有一个关于合并的问题。它的副作用并不十分清楚。我有以下RDD:了解Spark中的合并
JavaRDD<String> someStrings = //...
JavaRDD<String> coalescedStrings = someStrings.coalesce(100, false); //descreasing
那么,究竟发生了什么?如果我在someStrings
上操作某些操作会影响coalescedStrings
?
我有一个关于合并的问题。它的副作用并不十分清楚。我有以下RDD:了解Spark中的合并
JavaRDD<String> someStrings = //...
JavaRDD<String> coalescedStrings = someStrings.coalesce(100, false); //descreasing
那么,究竟发生了什么?如果我在someStrings
上操作某些操作会影响coalescedStrings
?
那么,究竟发生了什么?
首先,因为3210是一个Spark 转型(和所有的转换是懒),什么都没有发生,但。没有数据被读取,也没有对这些数据采取任何行动。发生了什么 - 一个新的 RDD(这只是分布式数据的驱动程序端抽象)创建。这个新的RDD是一组读取/转换数据的指令,与指令集someStrings
相同,只是它包含一个“指令”:将数据重新分区为100个分区。对于的操作/转换,新RDD(coalescedStrings
)将使用100个分区(这将在每个阶段转换为100个任务)来执行任何处理,这与使用原始分区计数的someStrings
上的操作不同。因此,两个RDD将包含相同的数据(如果操作),但分区不同。
如果我在
someStrings
上操作某些操作会不会影响coalescedStrings
?
没有,两个RDDS完全*相互独立的 - 对一个行动将不会影响其他。 someStrings
仍然有其原始数量的分区。
*这有一些例外,主要是它在哪里缓存:例如,如果在其计算的任何阶段,someStrings
被缓存,并输入您的coalescedStrings
操作之前someStrings
操作 - 那么接下来的操作上coalescedStrings
会能够使用缓存结果并从那里继续。
coalesce方法减少DataFrame中的分区数量。 无论您在someStrings上操作哪种操作,它都不会影响coalescedStrings。