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类型的】
表和表之间的关联: RDD和RDD关联,按照某个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的数据全部显示:返回值是元组+迭代器:
浙公网安备 33010602011771号