学习scala和spark的一些内容

来源:互联网 发布:单片机与嵌入式是啥 编辑:程序博客网 时间:2024/05/16 04:48

scala中的函数一些用法

  • trim 开头和结尾的空白忽略
  • map 对每一条输入进行指定的操作,然后为每一条输入返回一个对象
  • filter 过了

scala 特殊符号用法

  • ::: 三个冒号运算符(list的连接操作)
  • :: 两个冒号运算符:表示普通元素与list的连接操作
  • _N下划线数字运算符:用于访问元组的第N个元素,N的取值从1开始(元组的元素类型可以不同。)
  • <- 用于遍历集合对象
  • => 匿名函数
  • Int => String表示函数输入为Int型,返回String型,同Function(Int,String) () => T表示函数没有输入参数,但返回T

scala中下划线含义

  • _ 下划线 有很多含义
    1.通配符
    2.匿名函数
    3.指代集合中的每一个元素。例如筛选列表中大于某个值的元素
    4.使用模式匹配可以用来获取元组的组员。

    val m = Map(1 -> 2,2 -> 4) for ((k,) <- m) println(k)
    //只取key,因此在value处用_


5.:_* 作为一个整体,告诉编译器你希望将某个参数当作数序列处理。
6.+=:为map类型变量添加元素 -=:为map类型变量移除元素及其对应的值

小括号与大括号

  • scala中函数的小括号,可以用花括号来表示,即foo{xx} 与 foo(xx)是一回事儿。
  • 对于只有一个参数的方法,其小括号是可以省略的,map(lambda)可写为 map lambda,即这块{case 2 => “OK”}连同花括号整体是一个lambda(函数字面量)。
    // map方法这样写不能编译通过
    scala> List(2).map( case 2 => “OK” )
    // 换做花括号就可以了
    scala> List(2).map{ case 2 => “OK” }

Option[T]

  • 用 Option[T] 来避免 NullPointerException
  • Option有两个子类别,Some和None。当程序回传Some的时候,代表这个函式成功地给了你一个String,而你可以透过get()函数拿到那个String,如果程序返回的是None,则代表没有字符串可以给你。

reduceLeft 和 reduce

  • reduceLeft 和 reduceRight 我们可以强制处理元素的方向。(使用 reduce 方向是不被保证的)

函数

  • 函数和方法一般用def定义;也可以用val定义匿名函数,或者定义函数别名。

    def m0(x:Int) = x*x
    val m1 = (x:Int)=> x*x // 用(), ()是必须的
    val m2 = {x:Int=> x*x} // 用{}, {}是必须的

  • 不需要返回值的函数,可以使用def f() {…},永远返回Unit(即使使用了return),即:
    def f() {…} 等价于 def f():Unit = {…}

  • 需要返回值的函数,用 def f() = {…} 或者 def f = {…}

  • 对象的无参数方法的调用,可以省略.和()

    “hello world” toUpperCase // “HELLO WORLD”

  • 匿名函数 ((命名参数列表)=>函数实现)(参数列表)
    1.无参数: (()=>函数实现)()
    2.有一个参数且在最后: (函数实现)(参数)
    3.无返回值: ((命名参数列表)=>Unit)(参数列表)

spark 性能小技巧

  • collect() 通常在单元测试中使用.只有当你的整个数据集能在单台机器的内存中放得下时,才能使用collect(),因此,collect() 不能用在大规模数据集上。
  • distinct() 操作的开销很大,因为它需要将所有数据通过网络进行混洗(shuffle)

偏函数

  • 偏函数:当函数有多个参数,而在使用该函数时不想提供所有参数(比如函数有3个参数),只提供0~2个参数,此时得到的函数便是偏函数。
0 0