Spark初识

本文详细介绍了Spark作为大规模数据处理的快速通用计算引擎,强调其速度、易用性、通用性以及丰富的生态组件,如Spark Streaming、Spark SQL、SparkR和MLlib。Spark支持多种资源管理器,并且在Scala语言的基础上运行,提供了面向对象和函数式编程的特性。文章还简要概述了Scala的语法和数据类型,以及控制语句的使用。
摘要由CSDN通过智能技术生成

一.定义

        专为大规模数据处理而设计的快速通用的计算引擎,并形成一个高速发展应用广泛的生态系统

二.特点

        速度快:内存计算下,Spark 比 Hadoop 快100倍

        易用性:跨语言,拥有80多个高级运算符

        通用性:Spark 提供了大量的库,开发者可以在同一个应用程序中无缝组合使用这些库

        支持多种资源管理器:Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器

        生态组件丰富与成熟: spark streaming:实时数据处理
                                          shark/sparkSQL:用sql语句操作spark引擎
                                          sparkR:用R语言操作Spark
                                          mlib:机器学习算法库
                                          graphx:图计算组件

三.Spark生态圈

                

四.Scala

        4.1介绍

                多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
                运行在 Java虚拟机上,并兼容现有的 Java程序。
                源代码被编译成 Java字节码文件,运行于 JVM之上,并可以调用现有的 Java类库。

         4.2.特点

                面向对象:纯面向对象语言,每个值都是对象

                函数式编程:函数式语言,其函数也能当成值来使用。
                                   提供了轻量级的语法用以定义匿名函数,支持高阶函数,
                                   允许嵌套多层函数,并支持柯里化。

                静态类型:具备类型系统,通过编译时检查,保证代码的安全性和一致性

                扩展性:提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构

                并发性:其并没有在底层对语言的并发性做更新升级
                            使用 Actor作为其并发模型

        4.3编写代码(helloWorld)

object hello {
  def main(args: Array[String]): Unit= {
    println("hello World")
  }
}

        4.4应用前景

                技术层面:完全兼容 Java,运行于 JVM虚拟机之上
                               支持函数式编程和类型推断
                               结合面向过程和面向对象,并保证代码简洁及优雅
                               开发工具 IDE非常成熟

                应用层面:LinkedIn/Twitter/英国卫报等众多企业已全面生产应用 Scala,或替换 Java代码
                               spark/kafka等大数据开发组件的巨大爆发力,使 Scala为国内所热捧

        4.5基础语法

                4.5.1基本概念

                        对象:类的一个具体实例,对象包含属性和方法,如旺财有属性毛色和看家本领能力
                        类:类是对象的抽象,对象是类的一个实例
                        方法:描述类所拥有的行为能力,一个类可以拥有多个方法
                        属性:也称字段,即每个对象拥有它自身实例变量集合,通过赋值来创建真正的属性值

                4.5.2基本语法

                        区分大小写
                        类名:首字母要大写,如 class HelloWorld{}也称大驼峰
                        方法名称:首字母小写,从第 2个单词开启的首字段大写,如def toString(),即为小驼峰
                        程序文件名:保持与类名或对象名一致,区分大小写,以".scala"来结尾
                        主程序入口:defm ain(args:A rray[S tring]),scala若要独立运行必须从main方法开始处理,每个scala强制程序入口

                4.5.3标识符

                        兼容java标识符命名规范
                        多符号命名:可以加入"$,+,++,<"等符号参与命名,注意首字符和尾字符的若干限制,如"$"不要作为开头,"_"不要作为结尾。
                        有新增关键字,如 yield成为scala新关键字,则在scala调用时,则应由Thread.yield()改成Thread.'yield'来使用

                4.5.4关键字

                        

                        

                 4.5.5换行符

                        末尾的";"是可选的
                        如果一行中包括多个语句,则必须用";"来分隔

        4.6数据类型

                与Java相似部分(皆为对象类型,scala无原生数据类型)
                Byte,Short,Int,Long,Float,Double,Char,String,Boolean

                差异部分:Unit:即为空值或无值,与 Java中的 void等同
                               Null:即为 null,即空引用
                               Nothing:是任何类型的子类型,在 scala类层级的最末端
                               Any:是所有其它类的基(父)类
                               AnyRef:是所有引用类的基础,即除了值类型之外
                               AnyVal:是所有值类型的基类,包括 9个值类型

        4.7变量

                使用var来声明变量
                显式声明类型var variableName : DataType [= Initial Value]
                                      val constName: DataType [= Initial Value]
                隐式声明类型var myString="HelloWorld";
                                      var myInt=1;
                批量变量声明var a,b=10;

        4.8修饰符

                scala访问修饰符包括private,protected,public,对象的访问级别默认都是public

                private:仅在包含了成员定义的类或对象内部可见,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员

                protected:比java的protected更严格,除了子类可以访问,同包下的类是不能访问的

        4.9运算符

                

                

                 

                

                

        4.10控制语句

                4.10.1if...else

object TestIfElse {
  def main(args: Array[String]): Unit = {
    var age = 15;
    if (age < 18){
      println("未成年")
    }else{
      println("已经成年了")
    }
  }
}

                4.10.2while循环

object TestWhile {
  def main(args: Array[String]): Unit = {
    var begin = 10;
    var end = 20;
    while (begin < end) {
      println(begin)
      begin = begin +1
    }
  }
}

                4.10.3for循环

object TestFor_to {
  def main(args: Array[String]): Unit = {
    var i =10
    var j =90
    for (x <- i to j){
      println(x)
    }
  }
}
object TestFor_Unitl {
  def main(args: Array[String]): Unit = {
    var i =10
    var j =90
    for (x <- i until  j){
      println(x)
    }
  }
}
object TestFor_Double {
  def main(args: Array[String]): Unit = {
    var end = 5;
    var begin = 1;
    for(x <- begin to end;j <- begin to end){
      println(x+"*"+j)
    }
  }
}
object TestFor_List_And_Filter{
  def main(args: Array[String]): Unit = {
    val stringList = List("one","two","three","four","five","six");
    for(str <- stringList  if(str!="two" && str!="three")){
      println(str)
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值