美文网首页
Spark-shell&Scala(二)

Spark-shell&Scala(二)

作者: sf705 | 来源:发表于2017-05-13 17:55 被阅读82次

    scala 循环

    Scala循环中都没有 break和continue,所以用if条件了(for)

    for循环

    scala循环有点怪异,例如:for循环

    for(变量名 <- a to b)     
    eg: for(i <-1 to 10) print(i+" ") 输出:1 2 3 4 5 6 7 8 9 10
    
    • 表示变量 i 从1 到10,即:[1,10]
    • 其中 <- 该符号中间不能有空格,写成 : < - 就会出错

    加条件的for循环

    for(i<-1 to 10 if i%2 ==0)
         | print(i+",")
    2,4,6,8,10,
    
    • 上面i 范围为:[1,10],不过加上了一个条件:判断i的奇偶性
    • 如果出现两个及以上循环for,则加上分号
    • for循环中两个及以上的 if 条件之间不用加分号,如下所示
    scala> for(i<-1 to 10 if i%2==0; j<-1 to 2 if i%3 ==0)
         | print(i+",")
    6,6,
    scala> for(i<-1 to 10 if i%2==0; if i%3 ==0;j<-1 to 2 )
         | print(i+",")
    6,6,
    scala> for(i<-1 to 10 if i%2==0 if i%3 ==0;j<-1 to 2 )
         | print(i+",")
    6,6,
    

    while循环

    scala> while(i<10)
         | {print(i+",")
         | i+=1
         | }
    1,2,3,4,5,6,7,8,9,
    

    while (条件) 条件中不能加上if条件判断

    数组

    数组有可变数组与不可变数组,可变需要导入包,在spark-shell中没有安装Scala,所以此处只有用不可变数组了

    scala> var arr = Array(1,2,3,4,5)
    arr: Array[Int] = Array(1, 2, 3, 4, 5)
    scala> var arr2 = new Array[Int](5)
    arr2: Array[Int] = Array(0, 0, 0, 0, 0)
    
    scala> var arr = Array("hello"," world")
    arr: Array[String] = Array(hello, " world")
    scala> for(i<- 0 to 1)
         | print(arr(i)+",")
    hello, world,
    
    • 将数组arr 初始化为两个字符串
    • 在调用数组各个变量时,用arr(i),而不是arr[i],i 从0 开始

    Map映射

    map映射就是键值对的映射,和C++,Java中的Map差不多,都是不能重复
    例如:

    scala> val test1 = Map("a" -> 1,"b" -> 2,"a" -> 3)
    test1: scala.collection.immutable.Map[String,Int] = Map(a -> 3, b -> 2)
    
    scala> test1("b")
    res4: Int = 2
    
    scala> test1("a")
    res3: Int = 3
    
    • 形式为:Map(key1 -> value1,key2 -> value2)
    • 变量名(key) 输出对应的value
    • 如果key 有重复的,过滤掉,取最后出现的一个value作为该key的value

    Map 中的操作

    • contains(key),如果有该key,返回true,否则 false
    • getOrElse(key,num),如果有该key,返回对应的value,如果没有返回num
    • drop(loc),返回从位置为loc之后的所有map对,从0开始,如下面所示
    scala> val test2 = Map("a" -> 1,"b" -> 2,"c" -> 3)
    test2: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)
    
    scala> test2.contains("a")
    res6: Boolean = true
    
    scala> test2.drop(1)
    res14: scala.collection.immutable.Map[String,Int] = Map(b -> 2, c -> 3)
    
    scala> test2.drop(2)
    res15: scala.collection.immutable.Map[String,Int] = Map(c -> 3)
    
    scala> test2.drop(3)
    res16: scala.collection.immutable.Map[String,Int] = Map()
    

    Tuple元组

    • 元组里面可以存放多种类型的数据
    • 原则遍历是通过:元组名._loc,(元组名,点,下划线,元素位置)
    • 元组中元素位置从1开始
    scala> val tuple1 = (1 ,3,"hello",5,"world",3,1)
    tuple1: (Int, Int, String, Int, String, Int, Int) = (1,3,hello,5,world,3,1)
    
    scala> print(tuple1._1)
    1
    scala> print(tuple1._3)
    hello
    

    Set集合

    scala中的Set集合和C++、Java中的都差不多,都是包含没有重复的元素

    • 可以存放多种类型,如String、Int混用
    • 操作有:head,tail ,isEmpty,contains,drop 等
    scala> val set1 = Set(1,7,5,3,8,3)
    set1: scala.collection.immutable.Set[Int] = Set(5, 1, 7, 3, 8)
    scala> var set3 = Set("a","b","c","a")
    set3: scala.collection.immutable.Set[String] = Set(a, b, c)
    // Int String 
    scala> var set2= Set(1,2,3,"a","b")
    set2: scala.collection.immutable.Set[Any] = Set(1, a, 2, b, 3)
    

    相关文章

      网友评论

          本文标题:Spark-shell&Scala(二)

          本文链接:https://www.haomeiwen.com/subject/rnkmtxtx.html