键值对RDD常用操作:
1.分组: groupByKey(), 会对RDD进行hash分区
2.连接: join, leftOuterJoin, rightOuterJoin,效果如下:
join就是将两个RDD相同key的value组合在了一起,leftOuterJoin表示源RDD的每个key都有value,目的RDD的key的value是可以optional的,如果没有就是None。rightOuterJoin反之。
3.排序:sortByKey() 默认升序,可以通过重载compare方法定义自己的排序方式
4.计数,coutByKey()
5.查找,lookup(Key)
6.以map形式返回:collectAsMap()
*********************************************************
分区:在进行类似RDD连接或者需要对跨node的RDD进行重复键值对操作的时候,如果进行了RDD分区,可以提高效率,具体如:
val userData = sc.sequeceFile[userID, UserInfo]("hdfs://...")
.partitionBy(new HashPartitioner(100)) //创建100个hash分区,对于key%100相同的key会落入同一个节点
.persist()
在进行userData.join(OtherRDD)时,userData的数据不会产生混洗,也就减少了网络流量,提高了效率