Spark常用特殊符号详解
Posted xiaopihaierletian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark常用特殊符号详解相关的知识,希望对你有一定的参考价值。
=>(匿名函数)
在Spark中函数也是一个对象可以赋值给一个变量。
Spark的匿名函数定义格式:
(形参列表) => {函数体}
所以,=>
的作用就是创建一个匿名函数实例。
比如:(x:Int) => x +1 ,就等同于下面的Java方法:
public int function(int x) {
return x+1;
}
示例:
class Symbol {
var add = (x: Int) => x + 1
}
object test2 {
def main (args: Array[String] ): Unit = {
var symbol = new Symbol
printf(""+ symbol.add.toString())
}
}
<- (集合遍历)
循环遍历,示例如下:
var list = Array(1,2,3,4)
for (aa <- list) {
printf(aa+" ")
}
上面代码类似于Java的代码:
int[] list = {1,2,3,4};
for(int aa : list) {
System.out.print(aa+" ");
}
++=(字符串拼接)
var s:String = "a"
s+="b"
println(s)
s++="c"
println(s)
:::三个冒号运算符与::两个冒号运算符
:::三个冒号运算符表示List的连接操作。(类似于Java中的 list1.addAll(list2)
)
::两个冒号运算符表示普通元素与list的连接操作。(类似于Java中的list1.add(A)
操作)
- 用法为
x::list
,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1 x::list
等价于list.::(x)
:::
方法:只能用于连接两个List类型的集合
scala操作示例:
val one = List(1,2,3)
val two = List(4,5,6)
val three = one ::: two
println(three.toString())
val four = 7 :: three
println(four.toString())
++
(连接两个Seq)
- 列表、集合、字符串、Map
:::
方法:只能用于连接两个List类型的集合
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> a++List(4,5,6)
res17: List[Int] = List(1, 2, 3, 4, 5, 6)
:+
和+:(列表追加元素)
:+
方法:用于在尾部追加元素+:
方法:用于在头部追加元素- 只要记住冒号永远靠近集合类型
scala> List(1,2,3)
res14: List[Int] = List(1, 2, 3)
scala> res14:+2
res15: List[Int] = List(1, 2, 3, 2)
scala> 3+:res14
res16: List[Int] = List(3, 1, 2, 3)
-> 构造元组和_N访问元组第N个元素
- scala中元组含义:
- 元组是不同类型的值聚集线程的列表
- 通过将多个值使用小括号括起来,即表示元组
- scala中元组与数组区别:数组中元素 数据类型必须一样,但是元组数据类型可以不同。
示例程序:
val first = (1,2,3) // 定义三元元组
val one = 1
val two = 2
val three = one -> two
println(three) // 构造二元元组
println(three._2) // 访问二元元组中第二个值
scala> var a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> var b = List(4,5,6)
b: List[Int] = List(4, 5, 6)
scala> a -> b
res19: (List[Int], List[Int]) = (List(1, 2, 3),List(4, 5, 6))
_(下划线)的用法
通配符
_
可以起到类似于*
作用的通配符:
import org.apache.spark.SparkContext._
指代集合中的每一个元素
例如 遍历集合筛选列表中大于某个值的元素。
val lst = List(1,2,3,4,5)
val lstFilter = lst.filter(_ > 3)
获取元组中指定下标的元素值
val ss = (1,"22","333")
println(ss._1)
使用模式匹配可以用来获取元组的组员
val m = Map(1 -> 2,2 -> 4)
for ((k,_) <- m) println(k) //如果不需要所有部件, 则在不需要的部件使用_; 本例只取key,因此在value处用_
成员变量而非局部变量添加默认值
- 加不加空格都可以
- 对于Int类型来说,它是0
- 对于Double来说,它是0.0
- 对于引用类型来说,它是null
var s:Int=_
def main(args: Array[String]): Unit = {
println(s)
}
:_* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理
def main(args: Array[String]): Unit = {
val s = sum(1 to 5:_*) //把1 to 5当作一个序列处理
println(s)
}
def sum(args: Int*) : Int = {
var result = 0 ;
for(s2 <- args) {
result += s2 ;
}
result ;
}
+=
为可变数组添加元素,为map添加新的值
val arrBuf1 = new ArrayBuffer[Int]()
arrBuf1+= 11 // 添加一个元素
println(arrBuf1)
-=
为可变数组减去元素,为map移除相应的值
val arrBuf1 = new ArrayBuffer[Int]()
arrBuf1+= 11 // 添加一个元素
arrBuf1+= 12 // 添加一个元素
arrBuf1-= 12 // 删除一个元素
println(arrBuf1)
var map = Map(1 -> 1,2 -> 2,3 ->3 )
map-=1
println(map)
以上是关于Spark常用特殊符号详解的主要内容,如果未能解决你的问题,请参考以下文章