我发现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
Run Code Online (Sandbox Code Playgroud)
我首先意识到这个奇怪的行为是一个~20万行和1.3 GB的RDD,减法后可以扩展到2 GB以上
编辑:尝试使用更多值(10k)=>相同的行为上面的示例.大小增加约1.6倍.另外,reduceByKey似乎也有类似的效果.
当我创建一个RDD时
sc.paralellize(rdd3.collect())
Run Code Online (Sandbox Code Playgroud)
大小与rdd3相同,因此即使从RDD中提取,大小也会增加.