我有一个带有元组的RDD如下
(a, 1), (a, 2), (b,1)
如何使用不同键获取前两个元组。如果我做了一个(2),我会得到(a,1)和(a,2)
我需要的是(a,1),(b,1)(键是不同的)。价值观无关紧要。
答案 0 :(得分:2)
这是我在Scala中拼凑的内容。
sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
.reduceByKey((k1,k2) => k1)
.collect()
输出
Array[(String, Int)] = Array((a,1), (b,1))
答案 1 :(得分:0)
由于您已Sid Sname Svalue Status
============================
1 Joe 22 false
2 Derk 30 true
3 Derk1 40 true
RDD
,因此Pair
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))
答案 2 :(得分:-2)
很容易...... 你只需要像下面那样使用这个函数:
val data = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1)))
data.collectAsMap().foreach(println)