是否可以使用reduceByKey或AggregateByKey实现groupByKey行为

时间:2018-12-04 00:19:24

标签: scala apache-spark group-by aggregate rdd

我有以下输入内容

scala> val x = sc.parallelize(Array(("a", 1), ("b", 1), ("a", 1),
     |      | ("a", 1), ("b", 1), ("b", 1),
     |      | ("b", 1), ("b", 1)), 3)
x: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[3] at parallelize at <console>:24

当我使用groupBykey API时,

scala> val y = x.groupByKey
y: org.apache.spark.rdd.RDD[(String, Iterable[Int])] = ShuffledRDD[7] at groupByKey at <console>:25

scala> y.collect
res20: Array[(String, Iterable[Int])] = Array((a,CompactBuffer(1, 1, 1)), (b,CompactBuffer(1, 1, 1, 1, 1)))

使用groupByKey不必指定任何转换。由于groupByKey效率不高,因此无法使用。

从外观上看,我发现reduceByKey和aggregateByKey需要对输入数据进行转换操作。

是否可以使用reduceByKey或aggregateByKey实现groupByKey行为?

0 个答案:

没有答案