Spark subtractByKey增加RDD缓存的内存大小

时间:2016-02-17 20:32:11

标签: scala apache-spark rdd

我发现Apache Spark RDD的一个非常奇怪的行为(带有scala 2.11的spark 1.6.0):

当我在RDD上使用subtractByKey时,生成的RDD应该具有相等或更小的大小。我得到的是一个在内存中占用更多空间的RDD:

//Initialize first RDD
val rdd1 = sc.parallelize(Array((1,1),(2,2),(3,3))).cache()

//dummy action to cache it => size according to webgui: 184 Bytes
rdd1.first

//Initialize RDD to subtract (empty RDD should result in no change for rdd1)
val rdd2 = sc.parallelize(Array[(Int,Int)]())

//perform subtraction
val rdd3 = rdd1.subtractByKey(rdd2).cache()

//dummy action to cache rdd3 => size according to webgui: 208 Bytes
rdd3.first

我发现这个奇怪的行为是一个~20万行和大小为1.3 GB的RDD,在减法后可以扩展到2 GB以上

编辑:尝试使用更多值(10k)=>进行上述示例同样的行为。大小增加约1.6倍。另外,reduceByKey似乎也有类似的效果。

当我通过

创建RDD时
sc.paralellize(rdd3.collect())

大小与 rdd3 的大小相同,因此即使从RDD中提取,大小也会增加。

0 个答案:

没有答案