scala集合操作

来源:互联网 发布:软件接口测试方法 编辑:程序博客网 时间:2024/06/05 05:54

大数据技术是数据的集合及对数据集合的操作技术的统称:

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

2.对数据集合的操作技术:目前全球最火的是spark

3.spark的框架实现语言是scala,首选的应用程序开发语言也是scala,所以scala对集合,以及集合的操作至关重要

4.可能是巧合spark中对数据的操作算子和scala中对集合的操作算子是一样的

 

scala中数据的创建和操作:

1.最原始的数组创建方式形如:

val array =newArray[Int](5)

整数默认为0,赋值array(0)= 10

2.最常用的创建方式形如:

val array2 =Array[Int](1,2,3,4,5)//[Int]这个泛型类型是可以去掉的,是因为scala是可以类型推断

通过Array类名传入参数的方式来创建数组实例,背后的实现是调用Array的工厂方式模式apply来构建出数组及数组内容

val array3 =Array.apply(1,2,3,4,5)

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

4.如果想改变数组,可以使用ArrayBuffer这个可变数组

import scala.collection.mutable.ArrayBuffer

val arrayBuffer =ArrayBuffer[Int]()

arrayBuffer +=1

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

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

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

6.也可以在指定位置添加元素

arrayBuffer.insert(arrayBuffer.length,100,1000)

7.删除元素

arrayBuffer.remove(arrayBuffer.length -1)

8.变成固定长度,当需要多线程并发操作时,把ArrayBuffer转换成Array就非常重要,即使是Array,其本身虽然不可变动(元素不可删减),但是我们可以修改Array中的每个内容,所以多线程操作时,还是必须考虑并发写的问题

arrayBuffer.toArray

9.遍历

for(item <- array)println(item)

for(i <-0to array.length) print(array(i) + " ")

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

for(i <-0until (array.length,2))print(array(i) +" ")//步长为2

//通过range设定步长,Range(起始值,最小值,步长),其中不包括最小值

for(j <-Range(10,0,-2)) println(j)   // 10 8 6 4 2

//从后向前遍历

for(i <- (0toarray.length).reverse ) println(i)

 

println(array.filter{x=>x %2== 0}.mkString(""))

 

println(array.filter{_ %2== 0}.mkString(""))

 

println(array.filter{_ %2== 0}.map{_*10}.mkString(""))

 

10.如果想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成,这个在大数据中意义重大

val arrayAddOne =for(item <- array)yielditem +1

println(arrayAddOne.mkString(""))

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

(2)在大数据中处理中,例如spark中业务操作的核心思想就是类似于yield,来通过使用function对每个元素操作获取新的元素构成新的集合,其实就是新的RDD,例如MapPartionsRDD

11.集合的操作,可以通过算子,例如使用filter来过滤需要条件的算子,例如使用map来进行每一个元素的加工

 

 

 

 


0 0