scala

Spark入门(五)--Spark的reduce和reduceByKey

佐手、 提交于 2020-11-13 01:56:50
reduce和reduceByKey的区别 reduce和reduceByKey是spark中使用地非常频繁的,在 字数统计 中,可以看到reduceByKey的经典使用。那么reduce和reduceBykey的区别在哪呢? reduce 处理数据时有着一对一的特性,而 reduceByKey 则有着多对一的特性。比如reduce中会把数据集合中每一个元素都处理一次,并且每一个元素都对应着一个输出。而reduceByKey则不同,它会把所有key相同的值处理并且进行归并,其中归并的方法可以自己定义。 例子 在单词统计中,我们采用的就是reduceByKey,对于每一个单词我们设置成一个键值对(key,value),我们把单词作为key,即key=word,而value=1,因为遍历过程中,每个单词的出现一次,则标注1。那么reduceByKey则会把key相同的进行归并,然后根据我们定义的归并方法即对value进行累加处理,最后得到每个单词出现的次数。而reduce则没有相同Key归并的操作,而是将所有值统一归并,一并处理。 spark的reduce 我们采用scala来求得一个数据集中所有数值的平均值。该数据集包含5000个数值,数据集以及下列的代码均可从 github 下载,数据集名称为"avg"。为求得这个数据集中的平均值,我们先用map对文本数据进行处理

Scala的函数

纵然是瞬间 提交于 2020-11-11 06:07:34
Scala的函数 1、 函数的声明 scala函数通过def关键字定义,def前面可以具有修饰符,可以通过private、protected来控制其访问权限。 注意:没有public,不写默认就是public的。此外也可跟上override,final等关键字修饰。 1. 格式 [private/protected] def 函数名(参数列表):返回值声明 = {函数体} 2. 函数的返回值 1)函数体中return关键字往往可以省略掉,一旦省略掉,函数将会返回整个函数体中最后一行表达式的值,这也要求整个函数体的最后一行必须是正确类型的值的表达式。 2)大部分时候scala都可以通过=符号来自动推断出返回值的类型,所以通常返回值类型声明可以省略。 但是注意:如果因为省略了返回值类型造成歧义,则一定要写上返回值声明。 3)如果函数体只有一行内容,则包裹函数体的大括号可以省略。 4)如果返回值类型是UNIT,则另一种写法是可以去掉返回值类型和等号,把方法体写在花括号内,而这时方法内无论返回什么,返回值都是UNIT。相当于Java中的void。 示例: //方法的返回值为空 private def f1(){} protected def f2():String={"hello"} def f3()={"hello"} //如果函数体只一行内容,可以省了花括号 def f4()=