我有以下输入内容
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行为?