一、List的drop、take、splitAt、apply、indices、toString、mkString等实战
把两个List组拼起来,列表和列表连接用三个冒号的连接操作符,元素和列表连接用两个冒号的连接操作符
println(List(1,2,3,4) ::: List(5,6,7) ::: List(8,9))
println(List(1,2,3,4) ::: (List(5,6,7) ::: List(8,9)))
println(List(1,2,3,4).length)
输出:
List(1, 2, 3, 4, 5, 6, 7, 8, 9)
List(1, 2, 3, 4, 5, 6, 7, 8, 9)
4
List的相关操作方法:
val bigdata = List(0,1,2)
println(bigdata.last) //List最后一个元素
println(bigdata.init) //List中除去最后一个元素,其余元素的集合
println(bigdata.reverse) //把List元素反转过来
println(bigdata take 2) //取List前2个元素
println(bigdata drop 2) //丢掉List前2个元素
println(bigdata splitAt 2) // 把List分成两部分,前面一个部分有2个元素
println(bigdata.apply(2)) //取下标为2的元素
println(bigdata(2)) //同上,取下标为2的元素
输出:
2
List(0, 1)
List(2, 1, 0)
List(0, 1)
List(2)
(List(0, 1),List(2))
2
2
List的相关操作方法:
val data = List('a','b','c','d','e','f')
println(data indices) //取出List所有元素相对应的索引
println(data.indices zip data) //把左右两个集合进行拉链操作
println(data zipWithIndex) //把元素和索引具体进行配对的简便方法
println(data.toString())
println(data mkString("[",",","]")) //把List元素按照新的方式进行格式化输出
//第一个参数是格式化输出的开始第一个元素,第二个参数是集合中每2个元素之间的元素,第三个参数是格式化输出的最后一个元素
println(data.mkString("*")) //格式化输出,只关心中间的元素
println(data mkString)
输出: Range(0, 1, 2, 3, 4, 5)
Vector((0,a), (1,b), (2,c), (3,d), (4,e), (5,f))
List((a,0), (b,1), (c,2), (d,3), (e,4), (f,5))
List(a, b, c, d, e, f)
[a,b,c,d,e,f]
a*b*c*d*e*f
abcdef
List本身不变,要想作改变元素的操作,都会产生新的List,可以把对List改变的操作放在StringBuilder里
val builder = new StringBuilder //相当于缓冲数组
data.addString(builder,"[", ",", "]") //把data操作后的结果存入对象
println(builder)
println(data)
输出:
[a,b,c,d,e,f]
List(a, b, c, d, e, f)
Array和List可以相互转换:
val array = data.toArray
println(array.toList)
输出:List(a, b, c, d, e, f)把List内容拷贝进一个数组中
val new_Array = new Array[Char](10) //注意要拷贝进的这个数组必须能放下List的所有元素
data.copyToArray(new_Array, 3) //跳过数组前3个元素
new_Array.foreach(print)
输出:
abcdef
迭代器:
val iterator = data.toIterator
println(iterator.next)
println(iterator.next)
输出:
a
b
Spark之所以非常强大,让各个不同的框架(图计算、机器学习、流处理SQL)可以互相操作,主要因为有Iterator接口。
eg:机器学习可以直接使用Spark SQL中的内容,其中非常重要的是Spark SQL会产生RDD,要读取RDD的数据,有Iterator接口,不断next、next.......因为接口统一,读取数据的方式统一,机器学习不用关心数据来自Spark SQL还是流处理。
参考资料来源于大数据梦工厂 深入浅出scala 第33讲 由王家林老师讲解