1月23日

11- countByKey:算子:

   ** 该算子先按照key分组再做count操作

   ** 数据类型是K,V的RDD才能调用该算子

 

12- collectAsMap:算子:

   ** 该算子是将RDD的数据收集到Driver端,但是以Map的形式收集:

   ** 收集的RDD类型必须是: RDD[(key,value)]

   ** 和collect方法的区别就是: 比collect算子多了一个toMap方法:

val rdd1 = sc.textFile("src//data").flatMap(a=>a.split(" "))
val rdd2 = rdd1.map(a=>(a,1))
val rdd3: RDD[(String, Int)] = rdd2.reduceByKey(_+_)
val stringToInt: collection.Map[String, Int] = rdd3.collectAsMap()
for (elem <- stringToInt) {
 
println(elem)
}

扩展算子:

关联算子:转换类算子,必须是key value类型的

表和表之间的关联:  RDDRDD关联,按照某个key进行关联(必须是key value类型的)

join:   内链接,只有关联上的数据才会显示出来;

**类似scala中的拉链操作,join算子是根据两个rdd的key进行关联操作,返回的新元素为<key,value>,一对一的: 返回值类型是元组嵌套元组类型。

leftOuterJoin:左侧是数据都显示,右边的只显示关联上的,关联不上的数据显示null;

**相当于左外连接,不管左表的key对应的右表有没有数据,都会显示value,如果右表有就显示Some,没有就显示None,左表没有右表的key,那么右表的key就不显示左表不管有没有与右表相同的key,左表都全部显示;

rightOuterJoin:右侧是数据都显示,左边的只显示关联上的,关联不上的数据显示null;

它的功能是将右边的表,不管在左边有没有匹配,都会显示:

cogroup:全连接,相当于full join()   左右数据全部显示出来。

全连接,将AB两个RDD的数据全部显示:返回值是元组+迭代器:


posted @ 2022-01-23 16:18  不咬牙  阅读(70)  评论(0)    收藏  举报