内容简介:scala> val v = Vector(1, 2, 3, 4)v: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)scala> val v2 = v.map(n => n * 2)
1. map
val v = Vector(1, 2, 3, 4) val v2 = v.map(n => n * 2)
scala> val v = Vector(1, 2, 3, 4)
v: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)
scala> val v2 = v.map(n => n * 2)
v2: scala.collection.immutable.Vector[Int] = Vector(2, 4, 6, 8)
map
这个单词在这里不是地图的意思,而是映射、关联,将源容器中的元素经过函数处理后一一映射到新容器中。上面代码中执行的函数就是乘以2的匿名函数,我们可以自己定义成其他函数,加2啊,乘5啊,平方啊,等等。
2. reduce
val v = Vector(1, 2, 3, 4) val v3 = v.reduce((sum, n) => sum + n)
很多例子写 v.reduce((a, b) => a + b) 便不好理解,其实是传入2个值,处理后,再跟下一个值传入,直到所有的都处理完。 reduce
也不是减少的意思,而是归纳、简化的意思,具体讲是把容器中的元素作参数传给里面的二元匿名函数,我的理解是实际上是个尾递归函数。
3. 具体例子
求一个文件中的平均年龄
1 54
2 69
3 66
4 33
5 18
6 51
7 82
8 26
9 1
格式是这样的。
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object AvgAgeCalculator {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Spark Exercise:Average Age Calculator")
val sc = new SparkContext(conf)
val dataFile = sc.textFile("file:///Users/walle/Documents/spark_projects/sparkage/sample_age_data.txt", 5);
val count = dataFile.count()
//文件是对一行处理,这里对空格进行分割得到第二个,scala数组中是用()根据下标取元素
val ageData = dataFile.map(line => line.split(" ")(1))
//求和
val totalAge = ageData.map(age => Integer.parseInt( String.valueOf(age))).collect().reduce((a, b) => a + b)
val avgAge : Double = totalAge.toDouble / count.toDouble
println("Average Age is " + avgAge)
}
}
4048
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据系统构建
Nathan Marz、James Warren / 马延辉、向磊、魏东琦 / 机械工业出版社 / 2017-1 / 79.00
随着社交网络、网络分析和智能型电子商务的兴起,传统的数据库系统显然已无法满足海量数据的管理需求。 作为一种新的处理模式,大数据系统应运而生,它使用多台机器并行工作,能够对海量数据进行存储、处理、分析,进而帮助用户从中提取对优化流程、实现高增长率的有用信息,做更为精准有效的决策。 但不可忽略的是,它也引入了大多数开发者并不熟悉的、困扰传统架构的复杂性问题。 本书将教你充分利用集群硬件优势的La......一起来看看 《大数据系统构建》 这本书的介绍吧!