1.scala一些预热操作

1.1 to 是一个方法,()可以进行 参数传递,map()把每一个元素取出来进行相应的操作,

  1.  print(1.to(10).map(_*10))
  2.  结果
  3.  Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

1.2取数组中的每一个值

  1.  val arr=Array(1,2,3,4,5,6,7,8,9)
  2.  //直接遍历每一个值
  3.  for (i<-arr) print(i+" ")
  4.  //通过下标遍历每一个值 until是取值左闭右开
  5.  for(i <- 0 until arr.length) println(arr(i))

1.3 List的flatten 可以将一个list嵌套list、list嵌套字符串压平

  1.  val ls1=List(1,2,3,4,5,6,7,8,9)
  2.  val ls2=ls1.grouped(5)
  3.  val ls3=ls2.toList
  4.  println(ls3) //List(List(1, 2, 3, 4, 5), List(6, 7, 8, 9))
  5.  println(ls3.flatten) //list套list有压平操作 也可以压平 list中套多个字符串的情况
  6.  结果:list(1, 2, 3, 4, 5, 6, 7, 8, 9)

1.4取一个元组的第n个值

  1.  val t=(1,2,3,4,4,5,6)
  2.  print(t._2) ////去元组的第n个

2.wordcount

  1.  val lines=List("hello tom hello jerry","hello tom hello kitty hello china")
  2.  方法一:
  3.  val wc=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size)).toList.sortBy(_._2).reverse
  4.  方法二:
  5.  val wc2=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size)
  6.  方法三:
  7.  val wc3=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
  8.  如果是在spark上:
  9.  val wc4=lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2,false).collect

2.1flatMap=map+flatten

  1.  val words=lines.flatMap(_.split(" "))
  2.  结果:
  3.  List(hello, tom, hello, jerry, hello, tom, hello, kitty, hello, china)

可以拆分map过程

  1.  lines.map(_.split(" "))
  2.  拿到每一个元素(字符串),按照空格切割,切割后返回两个数组,仍放在List中
  3.  res0: List[Array[String]] = List(Array(hello, tom, hello, jerry), Array(hello, tom, hello, kitty, hello, china))

flatten过程

  1.  lines.map(_.split(" ")).flatten
  2.  List(hello, tom, hello, jerry, hello, tom, hello, kitty, hello, china)

2.2 将单词出现一次和1放在一起(放入元组)

  1.  val wordsAndOne=words.map((_,1))
  2.  List((hello,1), (tom,1), (hello,1), (jerry,1), (hello,1), (tom,1), (hello,1), (kitty,1), (hello,1), (china,1))

2.3 groupBy按照单词分组返回map

  1.  第一个_ 表示List中的每一个元组,取元组中的某一个元素用._n,即按照元组中的某一元素分组,返回是一个map
  2.  val grouped =wordsAndOne.groupBy(_._1)
  3.  Map(kitty -> List((kitty,1)), china -> List((china,1)), tom -> List((tom,1), (tom,1)), hello -> List((hello,1), (hello,1), (hello,1), (hello,1), (hello,1)), jerry -> List((jerry,1)))

2.4求和

  1.  t就是每一个对偶元组, 仍返回一个map
  2.  val result = grouped.map(t=>(t._1,t._2.size))
  3.  Map(kitty -> 1, china -> 1, tom -> 2, hello -> 5, jerry -> 1)

直接对第一个单词和list.size 但scala中不予许这样的操作

  1.  第一个_ 拿到一个对偶元组,取元组中的第一个元组。_._2.size即是取对偶元组第二个的大小。
  2.  val result=grouped.map(_._1,_._2.size)

2.5 按出现次数从大到小排序M:默认自然排序, map没有sortBy 先将map.toList

  1.  val finalResult=result.toList.sortBy(_._2).reverse
  2.  List((hello,5), (tom,2), (jerry,1), (china,1), (kitty,1)

3.方法二中:mapValues的_ 指的是元组的值 即v。key 不动,只是对values进行处理  结果 k v 一起返回

  1. val wc2=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size)
 

4.方法三中:

fold(0)(_+_)  0 是初始值
Map(kitty -> List((kitty,1)), china -> List((china,1)), tom -> List((tom,1), (tom,1)), hello -> List((hello,1), (hello,1), (hello,1), (hello,1), (hello,1)), jerry -> List((jerry,1)))
foldLeft(0)(_+_._2)第一个_表示初始值或者上一次累加的结果 中第二个_ ,表示拿到的每一个元组,第三个元组的中第n个值

  1. val wc3=lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
 

5.reduce和fold操作

  1.  val a=Array(1,2,3,4,5,6)
  2.  println(a.sum) //求和 21
  3.  println(a.reduce(_+_))//21 聚合操作要求传递两个参数
  4.  println(a.reduce(_-_))//-19 也可以进行减法操作

a.reduce(_+_) 默认调用 a.reduceLift   (((((1+2)+3)+4)+5)+6)

  1.  
  1. println(a.par.reduce(_+_)) //21 par转化成并行化操作
 

fold 也支持并行化--并行计算,及柯里化

  1.  val b=Array(1,2,3,4,5,6)
  2.  println(b.fold(10)(_+_)) //31和cpu核心数无关
  3.  println((b.par.fold(10)(_+_))) //61和cpu核心数有关,2核心4线程,所以4*10
  4.  println((b.par.fold(0)(_+_))) //21
  5.   
  6.  println(b.foldLeft(10)(_+_)) //31
  7.  println(b.foldRight(10)(_+_)) //31

scala 基础的更多相关文章

  1. 【Scala学习之一】 Scala基础语法

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  2. Scala学习(一)--Scala基础学习

    Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...

  3. Scala基础(1)

    Scala基础语法 声明与定义: val,常量声明                       val  x:T(把x声明成一个类型为T的常量)  x是变量的名字,T是变量的类型          v ...

  4. scala 基础知识总结

    在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...

  5. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

  6. Scala 基础(8)—— 占位符_和部分应用函数

    1. 占位符 _ 针对 Scala 基础(7)—— 函数字面量和一等函数 中最后提到的,关于 filter 函数字面量的精简写法,可以使用占位符 _ 来代替. 占位符_,用来表示一个或者多个参数.(这 ...

  7. Scala 基础(7)—— 函数字面量和一等函数

    1. 函数字面量 在 Scala 基础(3)—— 基础类型和基础操作 中提到了函数字面量,这里具体解释函数字面量的语法. 下面展示一个具体的函数字面量,它由三部分组成: (x: Int, y: Int ...

  8. Scala 基础(5)—— 构建函数式对象

    有了 Scala 基础(4)—— 类和对象 的前提,现在就可以来构建一个基于 Scala 的函数式对象. 下面开始构造一个有理数对象 Rational. 1. 主构造方法和辅助构造方法 对于每一个类的 ...

  9. Scala基础知识[一]

    摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言.设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Jav ...

  10. Scala基础简述

    * Scala基础简述 本文章作为Scala快速学习的教程,前提环境是:我假设在此之前,你已经学会了Java编程语言,并且我们以随学随用为目标(在此不会深度挖掘探讨Scala更高级层次的知识).其中语 ...

随机推荐

  1. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十七之铭文升级版

    铭文一级: 功能1:今天到现在为止 实战课程 的访问量 yyyyMMdd courseid 使用数据库来进行存储我们的统计结果 Spark Streaming把统计结果写入到数据库里面 可视化前端根据 ...

  2. 前端基于easyui的mvc扩展

    背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...

  3. 用jstack自动化捕抓异常java代码脚本

    #!/bin/bashdate=` date +%y%m%d-%H%M`pid=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |h ...

  4. WPF PrismDialog PopupWindowAction使用MetroWindow

    本示例必须在prism5.0版本以上 PopupWindowAction如何使用MetroWindow?   public class Window1ViewModel:BindableBase,II ...

  5. confluence与jira账号对接、查看到期时间及问题总结

    前面介绍了对于confluence和jira的破解版安装记录,下面简单记录下confluence和jira结合配置:安装顺序:先安装Jira,然后安装Confluence,在Confluence安装过 ...

  6. Mac 视频录制然后转 gif

    https://gist.github.com/dergachev/4627207 用 ScreenShot 或 Quicktime Player 录制视频, 保存位 in.mov ffmpeg -i ...

  7. IPv6技术详解:基本概念、应用现状、技术实践(下篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...

  8. 【2019北京集训测试赛(十三)】数据(sj) 冷静分析

    题目大意:给你一个代表区间$[1,n]$的线段树,问你随机访问区间$[1,n]$中的一个子区间,覆盖到的线段树节点个数的期望(需要乘上$\frac{n(n-1)}{2}$后输出). 数据范围:$n≤1 ...

  9. hdu 6127---Hard challenge(思维)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...

  10. 【OSX】多个JDK共存时选择要使用的JDK版本

    10.5以后的$JAVA_HOME没有被在.bash_profile中设置的话会被默认设置为 /usr/libexec/java_home. 如果一台mac里面安装了多个JDK, 可以通过/usr/l ...