我发现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中提取,大小也会增加。