在Scala Spark中获得前n个不同的Key Tuples

时间:2016-08-01 04:34:35

标签: scala apache-spark tuples rdd

我有一个带有元组的RDD如下

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

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

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

3 个答案:

答案 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)