我在(city, person_id, number)
上有一个RDD,我希望找到每个城市中数量最多的人。我的第一个想法是使用reduceByKey将city作为键,使用number作为值(rdd.reduce((num1, num2) => Math.max(num1, num2))
),但我不知道如何将person_id保留在进程中。
答案 0 :(得分:0)
您需要将您的RDD转换为PairRdd,然后您可以reduceByKey并保留最大数量的人
rdd.map { case (city, person_id, number) => (city, (person_id, number)) }.
reduceByKey {
case ((person_id1, n1), (person_id2, n2)) =>
if (n1 > n2)
(person_id1, n1)
else
(person_id2, n2)
}.map {
case (city, (person_id, number)) => (city, person_id)
}