我需要在 Scala 中使用我自己的类作为键/值对中的键。特别是,我有一个包含两个变量 id1
和 id2
的简单类,我希望元素仅基于 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/