在 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))
由于您已经拥有 Pair
的 RDD
,因此您的 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)
我有一个包含元组的 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))
由于您已经拥有 Pair
的 RDD
,因此您的 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)