package Basic
import scala.collection.mutable.ArrayBuffer
import com.sun.xml.internal.ws.org.objectweb.asm.Item
/**
* 大数据是数据的集合以及对数据集合的操作技术的统称,具体来说:
* 1、数据集合,会涉及数据的搜集、存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kafka;
* 2、对数据集合的操作技术,目前全球最火爆的是Spark;
*
* Spark的框架实现语言是Scala,首选的应用程序开发语言也是Scala,所以Scala对集合以及集合操作的支持就至关重要,且必须异常强大。
* 一个补充说明,Spark中对很多数据的操作算子和Scala中对集合的操作算子是一样的,也就是说掌握了Scala中集合的操作,基本上就可以直接操作Spark集合了。
*
* 关于Scala中数组的创建与操作:
* 1、最原始的创建数组的方式是,比如:val array=new Array[Int](5),指定数组的类型是Int,其固定长度是5个
* 2、对数组元素访问的时候下标的范围是0到length-1的长度,超过length-1的话会出现java.lang.ArrayIndexOutOfBoundsException
* 3、最常用和经典创建数组的方式,比如,Array[Int](1,2,3,4,5),直接通过Array类名并传入参数的方式来创建数组实例,
* 在背后的实现是调用Array的工厂方法模式apply()来构建出数组及数组内容的。
* 4、关于Array本身在底层的实现是借助了JVM平台上的Java语言的数组实现,是不可变的。
* 5、如果我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,然后使用ArrayBuffer这个可变数组.
* 6、关于ArrayBuffer增加元素,默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高。
* 7、当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要。其实,即使是Array,其本身虽然不可变动(元素不可删减),
* 但是我们可以修改Array中每个元素的内容,所以多线程操作的时候,还是必须考虑并发写的问题。
* 8、如果想在已经有的数组基础上,通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成;这个在大数据中意义重大;
* 第一点,它是在不修改已有的Array内容的基础上完成的,非常适合于大数据处理;
* 第二点,在大数据处理中,例如Spark中业务操作的核心思想就类似于yield,来通过使用function对每个元素操作获得新的元素构成新的集合,其实就是新的RDD,例如:MapPartitionsRDD
* 9、集合的操作往往可以通过丰富的操作算子,例如:filter来过滤符合条件的元素,例如map来进行每一个元素的加工。
*/
object HelloArrayOps {
def main(args: Array[String]): Unit = {
// val array=new Array[Int](5)
//在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推导的能力,而我们已经传进了
//当前数组Array的值,所以可以根据值来推导出类型
val array=Array(1,2,3,4,5)
// val array=Array.apply(1,2,3,4,5)
array(0)=10 //数组的索引下标是从0开始的
for(Item <- array){
println(Item)
}
val names=Array("Scala","Kafka","Spark")
for(Item <- names){
println(Item)
}
val arrayBuffer=ArrayBuffer[Int]()
arrayBuffer +=1
arrayBuffer +=2
arrayBuffer +=(4,5,6,7,8,9,10)
arrayBuffer ++=Array(1,2,3) //在结尾添加数组元素
arrayBuffer.insert(arrayBuffer.length-1, 100,1000)
arrayBuffer.remove(arrayBuffer.length-2)
arrayBuffer.toArray //当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要。
for(item <- arrayBuffer) println(item)
for(i <- 0 until array.length) println(array(i)+" ")
println()
for(i <- 0 until(array.length,2)) println(array(i)+" ")
println()
for(i <- (0 until array.length).reverse) println(array(i)+" ")
println()
println("Sum="+array.sum)
println("Max="+array.max)
//排序
//方法一
// val sortArray=array.sortWith(_<_)
// sortArray.foreach { item => println(item) }
//方法二
// scala.util.Sorting.quickSort(array)
// array.foreach {item => println(item) }
//方法三
val sortArray=array.sorted
sortArray.foreach { item => println(item) }
println(array.mkString(","))
println(array.mkString("*****",",","******"))
val arryAddedOne =for(item <- array) yield item+1
println(arryAddedOne.mkString(" "))
val arrayEven=for(item <- array if item%2==0) yield item
println(arrayEven.mkString(","))
println(array.filter { x => x%2==0 }.mkString(" & "))
println(array.filter {_%2==0}.map { x => x*10 }.mkString(" & "))
}
}
import scala.collection.mutable.ArrayBuffer
import com.sun.xml.internal.ws.org.objectweb.asm.Item
/**
* 大数据是数据的集合以及对数据集合的操作技术的统称,具体来说:
* 1、数据集合,会涉及数据的搜集、存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kafka;
* 2、对数据集合的操作技术,目前全球最火爆的是Spark;
*
* Spark的框架实现语言是Scala,首选的应用程序开发语言也是Scala,所以Scala对集合以及集合操作的支持就至关重要,且必须异常强大。
* 一个补充说明,Spark中对很多数据的操作算子和Scala中对集合的操作算子是一样的,也就是说掌握了Scala中集合的操作,基本上就可以直接操作Spark集合了。
*
* 关于Scala中数组的创建与操作:
* 1、最原始的创建数组的方式是,比如:val array=new Array[Int](5),指定数组的类型是Int,其固定长度是5个
* 2、对数组元素访问的时候下标的范围是0到length-1的长度,超过length-1的话会出现java.lang.ArrayIndexOutOfBoundsException
* 3、最常用和经典创建数组的方式,比如,Array[Int](1,2,3,4,5),直接通过Array类名并传入参数的方式来创建数组实例,
* 在背后的实现是调用Array的工厂方法模式apply()来构建出数组及数组内容的。
* 4、关于Array本身在底层的实现是借助了JVM平台上的Java语言的数组实现,是不可变的。
* 5、如果我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,然后使用ArrayBuffer这个可变数组.
* 6、关于ArrayBuffer增加元素,默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高。
* 7、当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要。其实,即使是Array,其本身虽然不可变动(元素不可删减),
* 但是我们可以修改Array中每个元素的内容,所以多线程操作的时候,还是必须考虑并发写的问题。
* 8、如果想在已经有的数组基础上,通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成;这个在大数据中意义重大;
* 第一点,它是在不修改已有的Array内容的基础上完成的,非常适合于大数据处理;
* 第二点,在大数据处理中,例如Spark中业务操作的核心思想就类似于yield,来通过使用function对每个元素操作获得新的元素构成新的集合,其实就是新的RDD,例如:MapPartitionsRDD
* 9、集合的操作往往可以通过丰富的操作算子,例如:filter来过滤符合条件的元素,例如map来进行每一个元素的加工。
*/
object HelloArrayOps {
def main(args: Array[String]): Unit = {
// val array=new Array[Int](5)
//在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推导的能力,而我们已经传进了
//当前数组Array的值,所以可以根据值来推导出类型
val array=Array(1,2,3,4,5)
// val array=Array.apply(1,2,3,4,5)
array(0)=10 //数组的索引下标是从0开始的
for(Item <- array){
println(Item)
}
val names=Array("Scala","Kafka","Spark")
for(Item <- names){
println(Item)
}
val arrayBuffer=ArrayBuffer[Int]()
arrayBuffer +=1
arrayBuffer +=2
arrayBuffer +=(4,5,6,7,8,9,10)
arrayBuffer ++=Array(1,2,3) //在结尾添加数组元素
arrayBuffer.insert(arrayBuffer.length-1, 100,1000)
arrayBuffer.remove(arrayBuffer.length-2)
arrayBuffer.toArray //当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要。
for(item <- arrayBuffer) println(item)
for(i <- 0 until array.length) println(array(i)+" ")
println()
for(i <- 0 until(array.length,2)) println(array(i)+" ")
println()
for(i <- (0 until array.length).reverse) println(array(i)+" ")
println()
println("Sum="+array.sum)
println("Max="+array.max)
//排序
//方法一
// val sortArray=array.sortWith(_<_)
// sortArray.foreach { item => println(item) }
//方法二
// scala.util.Sorting.quickSort(array)
// array.foreach {item => println(item) }
//方法三
val sortArray=array.sorted
sortArray.foreach { item => println(item) }
println(array.mkString(","))
println(array.mkString("*****",",","******"))
val arryAddedOne =for(item <- array) yield item+1
println(arryAddedOne.mkString(" "))
val arrayEven=for(item <- array if item%2==0) yield item
println(arrayEven.mkString(","))
println(array.filter { x => x%2==0 }.mkString(" & "))
println(array.filter {_%2==0}.map { x => x*10 }.mkString(" & "))
}
}