Spark初识

一、定义与特点

  • 定义
    • 专为大规模数据处理而设计的快速通用的计算引擎,并形成一个高速发展应用广泛的生态系统。
  • 特点
    • 速度快
      • 内存计算下,Spark 比 Hadoop 快100倍
    • 易用性
      • 80多个高级运算符
      • 跨语言:使用Java,Scala,Python,R和SQL快速编写应用程序。
    • 通用性
      • Spark 提供了大量的库,包括SQL、DataFrames、MLib、GraphX、Spark Streaming。
      • 开发者可以在同一个应用程序中无缝组合使用这些库。
    • 支持多种资源管理器
      • Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
    • 生态组件丰富与成熟
      • spark streaming:实时数据处理
      • shark/sparkSQL:用sql语句操作spark引擎
      • sparkR:用R语言操作Spark
      • mlib:机器学习算法库
      • graphx:图计算组件

二、spark

  • 在hadoop生态圈位置

        

1、Scala介绍

  • 作者
    • 联邦理工学院(EPFL)的 Martin Odersky,之前曾从事工作是 Generic Java 和 javac(Sun Java 编译器),并于 2001 年开始 设计 Scala。
  • 语言介绍
    • 多范式(multi-paradigm)的编程语言,设计初衷是要集成面向 对象编程和函数式编程的各种特性。
    • 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
    • 源代码被编译成 Java 字节码文件,运行于 JVM 之上,并可以调用 现有的 Java 类库。
  • 语言特点
    • 面向对象特性
      • 一种纯面向对象的语言,每个值都是对象
    • 函数式编程
      • 函数式语言,其函数也能当成值来使用。
      • 提供了轻量级的语法用以定义匿名函数,支持高阶函数, 允许嵌套多层函数,并支持柯里化。
    • 静态类型
      • 具备类型系统,通过编译时检查,保证代码的安全性和一 致性。
      • 像 scala,java,c/c++,c#,golang 等属于静态类型。
      • 像 python,ruby,javascript 等属于动态语言。
    • 扩展性
      • 提供了许多独特的语言机制,可以以库的形式轻易无缝添 加新的语言结构。
    • 并发性
      • 其并没有在底层对语言的并发性做更新升级。
      • 使用 Actor 作为其并发模型

2、应用前景

  • 技术方面
    • 完全兼容 Java,运行于 JVM 虚拟机之上。
    • 支持函数式编程和类型推断
    • 结合面向过程和面向对象,并保证代码简洁及优雅
    • 开发工具 IDE 非常成熟
  • 应用方面
    • LinkedIn/Twitter/英国卫报等众多企业已全面生产应用 Scala, 或替换 Java 代码。
    • spark/kafka 等大数据开发组件的巨大爆发力,使 Scala 为国内 所热捧。

3、基础语法

  •   基本概念
    •  对象:类的一个具体实例,对象包含属性和方法,如旺财有属性 毛色和看家本领能力。 
    • 类:类是对象的抽象,对象是类的一个实例。 
    • 方法:描述类所拥有的行为能力,一个类可以拥有多个方法。 
    • 属性:也称字段,即每个对象拥有它自身实例变量集合,通过赋 值来创建真正的属性值。
  • 基本语法 
    • 区分大小写 
    • 类名:首字母要大写,如 class HelloWorld{},class Person{},class Student{},也称大驼峰 
    • 方法名称:首字母小写,从第 2 个单词开启的首字段大写,如 def toString(),def getName(),即为小驼峰 
    • 程序文件名:保持与类名或对象名一致,区分大小写,以 ".scala"来结尾。 
    • 主程序入口:def main(args: Array[String]) ,scala 若要独立运行 必须从 main 方法开始处理,每个 scala 强制程序入口。
  • 标识符 
    • 兼容 java 标识符命名规范 
    • 命名规范:类为大驼峰,其它为小驼峰 
    • 多符号命名:可以加入“$,+,++,<“等符号参与命名,注意首字 符和尾字符的若干限制,如"$"不要作为开头,"_"不要作为结 尾。 
    • 有新增关键字,如 yield 成为 scala 新关键字,则在 scala 调用 时,则应由 Thread.yield()改成 Thread.`yield`来使用。
  • 关键字 
    • 以下为保留关键字,不要以关键字作为变量命名。

              

              

  • 注释 
    • 兼容 Java 注释,支持单行和多行 
    • 支持多行注释的嵌套结构
  • 换行符 
    • 面向行编程的语言,每行语句可以用显式的";"来结尾,或者以回 车换行来结尾。即末尾的";"是可选的。 
    • 如果一行中包括多个语句,则必须用";"来分隔。
  • 包定义 
    • 兼容 java 包方式,如 package com.tl.utils; o
    • 类 c#的包定义方式
      • package com.tl.test {
        • class MyTest {
        • }
  • 引用 
    • 引入单个类:import java.util.Date; 
    • 引入包下所有类:import java.util._; 
    • 引入包下若干类(选择器):import java.util.{Date,HashSet,HashMap} 
    • 引入类后重命名:import java.util.{Date => OldDate} 
    • 隐藏包下的部分成员:import java.util.{Date=>_,_} 
    • 默认包引入为:java.lang._、scala._、Predef._,默认引入的 包的情况下其内类的使用均不需要加上包名。

4、数据类型

  •  与Java相似部分(皆为对象类型,scala无原生数据类型)           Byte,Short,Int,Long,Float,Double,Char,String,Boolea
  • 差异部分:
    • Unit:即为空值或无值,与 Java中的 void等同
    • Null:即为 null,即空引用
    • Nothing:是任何类型的子类型,在 scala类层级的最末端
    • Any:是所有其它类的基(父)类
    • AnyRef:是所有引用类的基础,即除了值类型之外
    • AnyVal:是所有值类型的基类,包括 9个值类

5、变量

  • 常量 
    • 在程序运行过程中其值不会发生变化的量叫做常量。
      • 如:"A"、 "B"、"123"太丰富 
    • 使用 val 来声明常量
      • val constString:String="hero";
      • constString="new_hero";
  • 变量 
    • 在程序运行过程中其值可能发生改变的量叫做变量。
      • 如:对象的 名称、年龄、发色、身材等 o
    • 使用 var 来声明变量
      • var varString:String="name";
      • varString="new_name";
  • 变量类型声明
    • 显式声明类型
      • var variableName : DataType [= Initial Value] 或val constName: DataType [= Initial Value]
    • 隐式声明类型
      • var myString="HelloWorld";
      • var myInt=1;
    • 批量变量声明
      • var a,b=10;
      • println(a+b);

6、修饰符

  • scala访问修饰符包括private,protected,public,对象的访问级别默认都是public
  • private:仅在包含了成员定义的类或对象内部可见,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员
  • protected:比java的protected更严格,除了子类可以访问,同包下的类是不能访问的

7、运算符

  • 包括 5 种运算符,即算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符

                  

                

                 

                

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值