val conf = new SparkConf().setMaster("local").setAppName("PairRDD")
val sc = new SparkContext(conf)
val lines = sc.parallelize(List((1, 2), (3, 4), (3, 6)))
1、reduceByKey 合并具有相同的键值对
(1, 2), (3, 4), (3, 6)
// 合并具有相同的键值对
val reduce = lines.reduceByKey((x, y) => x + y)
println("1、合并具有相同的键值对")
reduce.foreach(println)
1、合并具有相同的键值对
(1,2)
(3,10)
2、groupByKey对具有相同键的值进行分组
(1, 2), (3, 4), (3, 6)
// 对具有相同键的值进行分组
val groupByKey = lines.groupByKey()
println("2、对具有相同键的值进行分组")
groupByKey.foreach(println)
2、对具有相同键的值进行分组
(1,CompactBuffer(2))
(3,CompactBuffer(4, 6))
4、keys 返回一个仅包含键的RDD(不加括号)
(1, 2), (3, 4), (3, 6)
// 对pairRDD中的每个值应用一个函数而不改变键
val mapValues = lines.mapValues(x => x + 1)
println("4、pairRDD中的每个值应用一个函数而不改变键")
mapValues.foreach(println)
(1,3)
(3,5)
(3,7)
5、values 返回一个仅包含值得RDD
(1, 2), (3, 4), (3, 6)
// 返回一个仅包含键的RDD
val keys = lines.keys
println("5、返回一个仅包含键的RDD")
keys.foreach(println)
1
3
3
6、sortByKey 返回一个根据键排序
(1, 2), (3, 4), (3, 6)
// 返回一个仅包含值得RDD
val values = lines.values
println("6、返回一个仅包含值得RDD")
values.foreach(println)
2
4
6
7、返回一个根据键排序
(1, 2), (3, 4), (3, 6)
// 返回一个根据键排序
val sortByKey = lines.sortByKey()
println("7、返回一个根据键排序")
lines.foreach(println)
(1,2)
(3,4)
(3,6)