2017-08-31 50 views
1

我有一个关于合并的问题。它的副作用并不十分清楚。我有以下RDD:了解Spark中的合并

JavaRDD<String> someStrings = //... 
JavaRDD<String> coalescedStrings = someStrings.coalesce(100, false); //descreasing 

那么,究竟发生了什么?如果我在someStrings上操作某些操作会影响coalescedStrings

回答

4

那么,究竟发生了什么?

首先,因为​​3210是一个Spark 转型(和所有的转换是),什么都没有发生,但。没有数据被读取,也没有对这些数据采取任何行动。发生了什么 - 一个新的 RDD(这只是分布式数据的驱动程序端抽象)创建。这个新的RDD是一组读取/转换数据的指令,与指令集someStrings相同,只是它包含一个“指令”:将数据重新分区为100个分区。对于的操作/转换,新RDDcoalescedStrings)将使用100个分区(这将在每个阶段转换为100个任务)来执行任何处理,这与使用原始分区计数的someStrings上的操作不同。因此,两个RDD将包含相同的数据(如果操作),但分区不同。

如果我在someStrings上操作某些操作会不会影响coalescedStrings

没有,两个RDDS完全*相互独立的 - 对一个行动将不会影响其他。 someStrings仍然有其原始数量的分区。

*这有一些例外,主要是它在哪里缓存:例如,如果在其计算的任何阶段,someStrings被缓存,并输入您的coalescedStrings操作之前someStrings操作 - 那么接下来的操作上coalescedStrings会能够使用缓存结果并从那里继续。

1

coalesce方法减少DataFrame中的分区数量。 无论您在someStrings上操作哪种操作,它都不会影响coalescedStrings。