【问题标题】:Apache Spark RDD distinct - strange behaviourApache Spark RDD 不同 - 奇怪的行为
【发布时间】:2015-04-07 02:33:27
【问题描述】:

我有一个大小为 80'000 的 pairRDD。只有 1.5% 的条目是唯一的。为了过滤掉复制的数据,我调用了distinct 方法:

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 的工作原理,我有什么遗漏的吗?

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    这些数字在转换为字符串后比较相等,但根据distinct 对待它们的方式,它们在转换之前不能比较相等。不要打印它们,而是检查比较结果 (==)。

    【讨论】:

    • 至少这是我的猜测。如果它们确实比较相等,则必须有一个更微妙的解释。
    • 谢谢你的回复,丹尼尔。我想知道为什么会发生这种情况,为什么在 135 个条目中,它确定 3 个与其他条目不同,而且彼此不同(我再次对它们做了distinct,它们都保留在 RDD 中)。这也很奇怪,因为我将 1 个条目放入地图并复制它。然后我把它们拿出来,它们已经改变了。奇怪的行为。
    • 你发现了什么?它们与== 相比是否相等?这确实是一种奇怪的行为。即使通过所有序列化和传输,我也不希望相等的数字变得不相等。
    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2023-03-17
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2017-03-07
    相关资源
    最近更新 更多