第七课:零基础实战Scala集合操作

package com.dt.spark.scala.basics

 

import scala.collection.mutable.ArrayBuffer

 

/**

 * 大数据技术是数据集合以及对数据集合操作的统称,具体来说:

 * 1.数据集合:会涉及数据的收集,存储等,收集会有很多技术,存储现在比较经典的是hadoop,很多情况下也会使用Kafka

 * 2.对数据集合的操作技术,目前最火爆的是Spark

 *

 * Spark的框架实现语言是Scala,首选app的开发语言也是Scala,所以Scala对集合和集合操作就

 * 至关重要,且需要非常强大

 * 一个巧合是,Spark中对很多数据的操作的算子和Scala中对集合的操作的算子是一模一一样的,

 * 也就是说,掌握了Scala中集合的操作,就可以直接去开发Spark了,非常美妙!!!

 */

object HelloArrayOps {

 

  def main(args:Array[String]){

   

    /**

     * 关于Scala中数组的创建和操作:

     * 1.最原始的数组创建方式:val array=new Array[Int](5),指定数组的类型是Int,

     * 且固定数组的长度是5

     */

    val array=new Array[Int](5)

    array(0)=10 //数组的索引是0

    for(item <- array) println(item)

    /**

     * 2.对数组元素进行访问的时候,下标范围在0~len-1,如果超过len-1或者小于0,会出现

     * ArrayIndexOutOfBoundsException

     */

    //array(5)=9

   

    /**

     * 3.最常用和最经典的创建方式,直接通过Array类名并传入参数的方式来创建数组实例,

     * 其实这种方式也等价于Array.apply[Int](1,2,3,4,5),在背后的实现是调用Array的

     * 工厂方法模式apply来构建出数组以及数组的内容

     * 当然在这里可以去掉Int这个泛型类型

     */

    val array1=Array[Int](5,4,3,2,1)

    for(item <- array1) println(item)

   

    val names=Array("Scala","Kafka","Spark")

    for(name <- names) println(name)

   

   

    /**

     * 4.关于array本身,底层的实现是借助了JVM平台上的Java语言的数组的实现,是不可变的

     * 5.如果我们想使用可变数组的话,首先需要导入ArrayBuffer,然后使用ArrayBuffer

     */

   

    val arrayBuffer=ArrayBuffer[Int]()

    /**

     * 6.关于ArrayBuffer增加元素,默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高

     */

    arrayBuffer += 1

    arrayBuffer += 2

    arrayBuffer += (3,4,5,6,7,8,9,10)

    arrayBuffer ++= Array(1,2,3)

    arrayBuffer.insert(0, 1111,2222)

    arrayBuffer.remove(arrayBuffer.length-1)

    /**

     * 7.当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要

     * 其实即使是Array,本身虽然元素不可删减,但是我们可以修改Array中每个元素的内容

     * 所以多线程操作的时候还是必须考虑并发写问题

     */

    val arr2=arrayBuffer.toArray

    for(item <- arrayBuffer){

      println(item)

    }

   

    for(i <- 0 until arrayBuffer.length) print(arrayBuffer(i)+" ")

    println

    for(i <- 0 until (arrayBuffer.length,2)) print(arrayBuffer(i)+" ")

    println

    for(i <- (0 until arrayBuffer.length).reverse) print(arrayBuffer(i)+" ")

    println

    println(array1.sum)

    println(array1.max)

    scala.util.Sorting.quickSort(array1) //进行升序排序

    for(item <- array1) println(item)

   

    println(array1.mkString("[",",","]"))

   

    /**

     * 8.如果想在已经有的数组的基础上通过作用于每个元素构成的新数组,

     * 则可以通过yield语法来完成,这在大数据中意义重大:

     * 1.它是在不修改已经有的Array的内容的基础上完成的,非常适合大数据处理

     * 2.在大数据处理中,例如Spark中业务操作的核心就类似于yield,

     * 来通过使用function对每个元素操作获得新的元素构成新的集合,例如MapPartitionsRDD

     */

    val arrayAddedOne=for(item <- array1) yield item+1

    println(arrayAddedOne.mkString(" "))

   

    val arrayAddedEven=for(item <- array1 if item % 2 == 0) yield item*2

    println(arrayAddedEven.mkString(" "))

   

    /**

     * 9.集合的操作往往可以通过丰富的操作算子,例如filter来过滤符合条件的元素,

     * 例如map来进行每一个元素的加工

     */

    println(array1.filter(_%2==0).mkString(" "))

    println(array1.filter(_%2==0).map(_*3).mkString(" "))

   

   

   

  }

 

}

 

归纳总结:1.大数据技术和数据集合

2.Spark中对很多数据的操作的算子和Scala中对集合的操作

3.关于可变数组和不可变数组

4.多线程并发操作的时候,需要考虑的事情

5.关于yield语法的使用

6.关于集合的函数式编程

 

转载于:https://my.oschina.net/u/1449867/blog/723920

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值