2015-04-06 100 views
2

我有一个尺寸80'000的pairRDD。只有1.5%的条目是唯一的。为了筛选出复制的数据我称之为distinct方法:Apache Spark RDD不同 - 奇怪的行为

val newRDD = oldRDD.distinct 

然而,这不仅能消除大部分的重复数据 - 它留下3-5之间重复每个唯一的入口!

我检查了剩余的条目与原始条目,它们完全一样。

Sample of the original data: 

(1,(0.0500937328554143, 0.9000767961093774)) 
(1,(0.0500937328554143, 0.9000767961093774)) 
(1,(0.0500937328554143, 0.9000767961093774)) 

Sample of the distinct data: 

(1,(0.0500937328554143, 0.9000767961093774)) 
(1,(0.0500937328554143, 0.9000767961093774)) 
(1,(0.0500937328554143, 0.9000767961093774)) 

有什么,我想知道如何distinct工作?

回答

1

这些数字在转换为字符串后比较相等,但根据distinct如何处理它们,它们在转换之前不得等于相等。不要打印它们,请检查比较结果(==)。

+0

至少这是我的猜测。如果他们确实比较相等,则必须有一个微妙的解释。 –

+0

谢谢你的回复,丹尼尔。我想知道为什么会发生这种情况,为什么在135个参赛作品中,它决定了3个与其他作品不同,并且彼此之间(我对他们又做了“独特”处理,而且都保留在RDD中)。这也很奇怪,因为我把1个条目放入地图中,然后复制它。然后我把它们拿出来,他们已经改变了。奇怪的行为。 – monster

+0

你发现了什么?它们与'=='相等吗?这确实是一个奇怪的行为。即使通过所有的序列化和传输,我也不会期望相同的数字变得不相等。 –