scala map reduce 思想

栏目: Scala · 发布时间: 7年前

内容简介: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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆者:周鸿祎自传

颠覆者:周鸿祎自传

周鸿祎、范海涛 / 北京联合出版公司 / 2017-11 / 49.80元

周鸿祎,一个在中国互联网历史上举足轻重的名字。他被认为是奠定当今中国互联网格局的人之一。 作为第一代互联网人,中国互联网行业最好的产品经理、创业者,他每时每刻都以自己的实践,为互联网的发展贡献自己的力量。 在很长一段时间内,他没有在公共场合发声,甚至有粉丝对当前死水一潭的互联网现状不满意,发出了“人民想念周鸿祎”的呼声。 但周鸿祎在小时候,却是一个踢天弄井,动不动就大闹天宫的超级......一起来看看 《颠覆者:周鸿祎自传》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试