我需要在 Scala 中使用我自己的类作为键/值对中的键。特别是,我有一个包含两个变量 id1id2 的简单类,我希望元素仅基于 id2 而不是 id1 进行分组。我在网上找不到任何关于如何以及在何处覆盖 reduceByKey() 方法的比较方法的信息,以便它可以根据我的自定义 compare() 方法将具有相同键的元素分组。

任何帮助表示赞赏。
谢谢你。

最佳答案

您不能覆盖 reduceByKey 的比较,因为它无法利用这样一个事实,即您的数据经常在整个集群的不同执行程序上按键进行混洗。您可以更改 key (并且请注意,根据您使用的转换/操作,这可能会重新调整数据)。

RDD 中有一个很好的方法来执行此操作,称为 keyBy ,因此您可以执行以下操作:

val data: RDD[MyClass] = ...    // Same code you have now.
val byId2 = data.keyBy(_.id2)   //Assuming your ids are Longs, will produce a RDD[(Long,MyClass)]

关于scala - Spark : Custom key compare method for reduceByKey,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31296656/

10-12 23:02