开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段:RDD 算子_ Action _ countByKey】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/11982
RDD 算子_ Action _ countByKey
内容介绍
一、前言
二、实例讲解
三、小结
一、前言
接下来我们介绍两个算子,都用于求数量,叫做 count 和countByKey , count是直接用于求数量,与 count 函数相似, countByKey 是按照 Key 分组,求每一个组数量。求数量是一个非常常见的日常需求,接下来让大家了解一下 count 和 countByKey 的使用。
二、实例讲解
进入代码,创建新方法和集合,创建 RDD ,编写一个简单的集合,
print 调用 count ,求出结果,代码如下:
@Test
def count(): Unit = {
val rdd = sc.parallelize(Seq(("a",1),("b",2),("c",3),("d",4)))
println(rdd.count())
}
如果想求每一个 Key 出现的次数,可做小小的修改,代码如下:
@Test
def count(): Unit = {
val rdd = sc.parallelize(Seq(("a",1),("a",2),("c",3),("c",4)))
println(rdd.count())
println(rdd.countByKey())
}
运行后查看结果,第一个结果, count求出了数据的总数,第二个结果为 countByKey 的返回值,是一个 map 型的数据,第一个元素是原始数据集中的 Key ,第二个元素是 Key 出现的次数。
三、小结
我们通过运行结果来总结一下。 count 和 countByKey 的运行结果相距较远,在他们的位置处各有一个 job 运行。每调用一次 Action 会生成一个 job ,它会单独调度执行,获取结果。相距较远,中间出现大量的 Log ,是在重新启动job 。这是它的第一个特点。
第二个特点, countByKey 的运算结果是 Map 型的数据。有一个概念叫做数据倾斜,可以通过 countByKey 查看 Key 对应的数据数量,从而解决倾斜问题。这就是 count 和 countByKey 。