在 Scala Spark 中获取前 n 个不同的键元组

Getting first n distinct Key Tuples in Scala Spark

我有一个包含元组的 RDD,如下所示

(a, 1), (a, 2), (b,1)

如何使用 distinct 键获取前两个元组。如果我做一个 take(2),我会得到 (a, 1) 和 (a, 2)

我需要的是 (a, 1), (b,1) (键是不同的)。值无关紧要。

这是我在 Scala 中拼凑的内容。

sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
    .reduceByKey((k1,k2) => k1)
    .collect()

输出

Array[(String, Int)] = Array((a,1), (b,1))

由于您已经拥有 PairRDD,因此您的 RDD 具有 org.apache.spark.rdd.PairRDDFunctions 提供的额外键值功能。让我们利用它。

val pairRdd = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
// RDD[(String, Int)]

val groupedRdd = pairRdd.groupByKey()
// RDD[(String, Iterable[Int])]

val requiredRdd = groupedRdd.map((key, iter) => (key, iter.head))
// RDD[(String, Int)]

或者简而言之

sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
  .groupByKey()
  .map((key, iter) => (key, iter.head))

很简单..... 你只需要像波纹管一样使用该功能:

val data = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
data.collectAsMap().foreach(println)