`

scala

 
阅读更多

<!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML/> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves>false</w:TrackMoves> <w:TrackFormatting/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:11.0pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} table.MsoTableGrid {mso-style-name:网格型; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-priority:59; mso-style-unhide:no; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} </style> <![endif]-->

Scala

Scala介绍

1.    Spark中使用的是Sacla2.10scalajava语言一样需要在jvm中编译后才能运行,也就是说都需要安装jdk环境。只是后缀是.scala

 

2.Scala官网6个特征。

      1).Javascala可以混编(可以互相调用类,例如调用java中的unti类)

      2).类型推测(自动推测类型)

      3).并发和分布式(Actor

      4).特质,特征(类似javainterfaces abstract结合)(支持多继承多实现)

      5).模式匹配match(类似java switch

6).高阶函数(scala不仅面向对象,还面向函数)。Scala中函数其实就是方法,将方法当做一个参数传给函数。

 

Scala安装使用

1.    windows安装,配置环境变量

Ø  官网下载scala2.10http://www.scala-lang.org/download/2.10.4.html

Ø  下载好后安装。双击msi包安装,记住安装的路径。

Ø  配置环境变量(和配置jdk一样)

l  新建SCALA_HOME

 

l  上个步骤完成后,编辑Path变量,在后面追加如下:

;%SCALA_HOME%\bin;%SCALA_HOME%\jre\bin

 

Ø  打开cmd,输入:scala  - version  看是否显示版本号,确定是否安装成功

 

 

2.    eclipse 配置scala插件

Ø  下载插件(一定要对应eclipse版本下载)

http://scala-ide.org/download/prev-stable.html  

 

Ø  下载好zip包后,解压如下:

 

Ø  featuresplugins两个文件夹拷贝到eclipse安装目录中的” dropins/scala”目录下。进入dropins,新建scala文件夹,将两个文件夹拷贝到“dropins/scala”下

3.    scala ide

下载网址:http://scala-ide.org/download/sdk.html

4.    idea 中配置scala插件

Ø  打开idea,close项目后,点击Configure->Plugins

 

Ø  搜索scala,点击Install安装

 

Ø  设置jdk,打开Project Structure,点击new 选择安装好的jdk路径

 

 

Ø  创建scala项目,配置scala sdk(Software Development Kit)

 

 

 

点击第三步,弹出选择SDK,点击Browse选择本地安装的Scala目录。选择system.

Scala基础

1.   数据类型

 

 

 

2.   变量和常量的声明

Ø  定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10

Ø  常量不可再赋值

    /**

     * 定义变量和常量

     * 变量 : var定义,可修改

     * 常量 : val定义,不可修改

     */

    varname = "zhangsan"

    println(name)

    name ="lisi"

    println(name)

    valgender = "m"

//    gender = "m"//错误,不能给常量再赋值

 

3.  类和对象

Ø  创建类

class Person{

  val name = "zhangsan"

  valage = 18

  defsayName() = {

    "my name is "+name

  }

}

 

Ø  创建对象

objectLesson_Class {

   defmain(args: Array[String]): Unit = {

    valperson = new Person()

    println(person.age);

    println(person.sayName())

  }

}

 

Ø  伴生类和伴生对象

class Person(xname :String , xage :Int){

  varname = Person.name

  valage = xage

  vargender = "m"

  defthis(name:String,age:Int,g:String){

    this(name,age)

    gender = g

  }

 

  defsayName() = {

    "my name is "+name

  }

 

}

 

objectPerson {

  valname = "zhangsanfeng"

 

  defmain(args: Array[String]): Unit = {

    valperson = new Person("wagnwu",10,"f")

    println(person.age);

    println(person.sayName())

    println(person.gender)

  }

}

 

注意点:

l  建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。

l  scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数

l  scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。

重写构造函数的时候,必须要调用默认的构造函数。

l  class 类属性自带getter setter方法。

l  使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。

l  如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

 

4.   if else

    /**

     * if else

     */

    valage =18

    if (age<18 ){

    println("no allow")

    }elseif (18<=age&&age<=20){

    println("allow with other")

    }else{

    println("allow self")

    }

 

5.   for ,while,do…while

1.    tountil 的用法(不带步长,带步长区别)

  /**

     * tountil

     * 例:

     * 1 to 10 返回110Range数组,包含10

     * 1 until 10 返回110 Range数组,不包含10

     */

   

    println(1to10 )//打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

    println(1.to(10))//与上面等价,打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

   

    println(1to (10 ,2))//步长为2,从1开始打印1,3,5,7,9

    println(1.to(10, 2))

   

    println(1until10 ) //不包含最后一个数,打印 1,2,3,4,5,6,7,8,9

    println(1.until(10))//与上面等价

   

println(1until (10 ,3 ))//步长为2,从1开始打印,打印1,4,7

 

2.    创建for循环

   /**

     * for 循环

     *

     */

    for( i <- 1to10 ){

      println(i)

    }

3.    创建多层for循环

    //可以分号隔开,写入多个list赋值的变量,构成多层for循环

    //scala不能写count++ count-- 只能写count+

    varcount = 0;

    for(i <- 1to10; j <- 1until10){

      println("i="+i+",    j="+j)

      count += 1

    }

    println(count);

   

    //例子:打印小九九

    for(i <- 1until10 ;j <- 1until10){

      if(i>=j){

      print(i+" * "+j+" = "+i*j+"")

       

      }

      if(i==j ){

        println()

      }

     

    }

 

4.    for循环中可以加条件判断,分号隔开

    //可以在for循环中加入条件判断

    for(i<- 1to10 ;if (i%2) ==0 ;if (i==4) ){

      println(i)

}

 

5.    scala中不能使用count++count—只能使用count = count+1 count += 1

6.    for循环用yield 关键字返回一个集合

7.    while循环,while(){}do {}while()

   

    //for中的符合条件的元素通过yield关键字返回成一个集合

    vallist = for(i <- 1to10  ; if(i>5 )) yieldi

    for( w <- list ){

      println(w)

}

 

   /**

     * while 循环

     */

    varindex = 0

    while(index<100 ){

    println(""+index+"while 循环")

      index += 1

    }

    index = 0

    do{

    index +=1

    println(""+index+"do while 循环")

}while(index<100 )

 

Scala函数

1.   Scala函数的定义

Ø  有参函数

Ø  无参函数

 

deffun (a: Int , b: Int ) : Unit = {

   println(a+b)

 }

fun(1,1)

   

deffun1 (a : Int , b : Int)= a+b

    println(fun1(1,2)) 

注意点:

l  函数定义语法 def来定义

l  可以定义传入的参数,要指定传入参数的类型

l  方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归函数中或者函数的返回值是函数类型的时候。

l  scala中函数有返回值时,可以写return,也可以不写return,会把函数中最后一行当做结果返回。当写return时,必须要写函数的返回值。

l  如果返回值可以一行搞定,可以将{}省略不写

l  传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。

l  如果去掉方法体前面的等号,那么这个方法返回类型必定是Unit的。这种说法无论方法体里面什么逻辑都成立,scala可以把任意类型转换为Unit.假设,里面的逻辑最后返回了一个string,那么这个返回值会被转换成Unit,并且值会被丢弃。

2.   递归函数

  /**

     * 递归函数

     * 5的阶乘

     */

    deffun2(num :Int) :Int= {

      if(num==1)

        num

      else

        num*fun2(num-1)

    }

    print(fun2(5))

3.   包含参数默认值的函数

l  默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值。

l  如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称。

   /**

     * 包含默认参数值的函数

     * 注意:

     * 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值

     * 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称

     */

    deffun3(a :Int = 10,b:Int) = {

      println(a+b)

    }

    fun3(b=2)

 

4.   可变参数个数的函数

l  多个参数用逗号分开

    /**

     * 可变参数个数的函数

     * 注意:多个参数逗号分开

     */

    deffun4(elements :Int*)={

      varsum = 0;

      for(elem <- elements){

        sum += elem

      }

      sum

    }

    println(fun4(1,2,3,4))

5.   匿名函数

1.    有参匿名函数

2.    无参匿名函数

3.    有返回值的匿名函数

l  可以将匿名函数返回给val定义的值

l  匿名函数不能显式声明函数的返回类型

    /**

     * 匿名函数

     * 1.有参数匿名函数

     * 2.无参数匿名函数

     * 3.有返回值的匿名函数

     * 注意:

     * 可以将匿名函数返回给定义的一个变量

     */

    //有参数匿名函数

    valvalue1 = (a : Int) => {

      println(a)

    }

    value1(1)

    //无参数匿名函数

    valvalue2 = ()=>{

      println("我爱尚学堂")

    }

    value2()

    //有返回值的匿名函数

    valvalue3 = (a:Int,b:Int) =>{

      a+b

    }

    println(value3(4,4))

6.   嵌套函数

    /**

     * 嵌套函数

     * 例如:嵌套函数求5的阶乘

     */

    deffun5(num:Int)={

      deffun6(a:Int,b:Int):Int={

        if(a==1){

          b

        }else{

          fun6(a-1,a*b)

        }

      }

      fun6(num,1)

    }

    println(fun5(5))

 

7.   偏应用函数

偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。

    /**

     * 偏应用函数

     */

    deflog(date :Date, s :String)= {

      println("date is "+date+",log is "+s)

    }

   

    valdate = new Date()

    log(date ,"log1")

    log(date ,"log2")

    log(date ,"log3")

   

    //想要调用log,以上变化的是第二个参数,可以用偏应用函数处理

    vallogWithDate = log(date,_:String)

    logWithDate("log11")

    logWithDate("log22")

    logWithDate("log33")

8.   高阶函数

函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。

l  函数的参数是函数

l  函数的返回是函数

l  函数的参数和函数的返回是函数

    /**

     * 高阶函数

     * 函数的参数是函数        或者函数的返回是函数       或者函数的参数和返回都是函数

     */

   

    //函数的参数是函数

    defhightFun(f : (Int,Int) =>Int, a:Int ) : Int = {

      f(a,100)

    }

    deff(v1 :Int,v2: Int):Int  = {

      v1+v2

    }

   

    println(hightFun(f, 1))

   

    //函数的返回是函数

    //12,3,4相加

    defhightFun2(a : Int,b:Int) : (Int,Int)=>Int = {

      deff2 (v1: Int,v2:Int) :Int = {

        v1+v2+a+b

      }

      f2

    }

    println(hightFun2(1,2)(3,4))

   

    //函数的参数是函数,函数的返回是函数

    defhightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {

      f

    }

    println(hightFun3(f)(100,200))

    println(hightFun3((a,b) =>{a+b})(200,200))

    //以上这句话还可以写成这样

    //如果函数的参数在方法体中只使用了一次那么可以写成_表示

    println(hightFun3(_+_)(200,200))

9.   柯里化函数

l  可以理解为高阶函数的简化

   /**

     * 柯里化函数

     */

    deffun7(a :Int,b:Int)(c:Int,d:Int) = {

      a+b+c+d

    }

    println(fun7(1,2)(3,4))

Scala字符串

1.    String

2.    StringBuilder 可变

3.    string操作方法举例

Ø  比较:equals

Ø  比较忽略大小写:equalsIgnoreCase

Ø  indexOf:如果字符串中有传入的assci码对应的值,返回下标

    /**

     * String && StringBuilder

     */

    valstr = "abcd"

    valstr1 = "ABCD"

   

    println(str.indexOf(97))

    println(str.indexOf("b"))

 

    println(str==str1)

    /**

     * compareToIgnoreCase

     *

     * 如果参数字符串等于此字符串,则返回值 0

     * 如果此字符串小于字符串参数,则返回一个小于 0 的值;

     * 如果此字符串大于字符串参数,则返回一个大于 0 的值。

     *

     */

    println(str.compareToIgnoreCase(str1))

   

    valstrBuilder = newStringBuilder

    strBuilder.append("abc")

//    strBuilder.+('d')

    strBuilder+'d'

//    strBuilder.++=("efg")

    strBuilder++="efg"

//    strBuilder.+=('h')

    strBuilder+='h'

    strBuilder.append(1.0)

    strBuilder.append(18f)

    println(strBuilder)

   

String方法:(见附件)

 

 

集合

数组

1.    创建数组

Ø  new Array[Int](10)

赋值:arr(0) = xxx

Ø  Array[String](“s1”,”s2”,”s3”)

2.    数组遍历

Ø  for

Ø  foreach

3.    创建一维数组和二维数组

4.    数组中方法举例

Ø  Array.concate:合并数组

Ø  Array.fill(5)(“bjsxt”):创建初始值的定长数组

创建两种方式:

   /**

     * 创建数组两种方式:

     * 1.new Array[String](3)

     * 2.直接Array

     */

   

    //创建类型为Int 长度为3的数组

    valarr1 = new Array[Int](3)

    //创建String 类型的数组,直接赋值

    valarr2 = Array[String]("s100","s200","s300")

    //赋值

    arr1(0) = 100

    arr1(1) = 200

    arr1(2) = 300

遍历两种方式:

    /**

     * 遍历两种方式

     */

    for(i <- arr1){

      println(i)

    }

    arr1.foreach(i => {

      println(i)

    })

   

    for(s <- arr2){

      println(s)

    }

    arr2.foreach {

      x => println(x)

    }

   

创建二维数组

    /**

     * 创建二维数组和遍历

     */

    valarr3 = new Array[Array[String]](3)

    arr3(0)=Array("1","2","3")

    arr3(1)=Array("4","5","6")

    arr3(2)=Array("7","8","9")

    for(i <- 0untilarr3.length){

      for(j <- 0untilarr3(i).length){

        print(arr3(i)(j)+"   ")

      }

      println()

    }

   

    varcount = 0

    for(arr <- arr3 ;i <- arr){

      if(count%3==0){

        println()

      }

      print(i+"  ")

      count +=1

    }

   

    arr3.foreach { arr  => {

      arr.foreach { println }

    }}

   

   

    valarr4 = Array[Array[Int]](Array(1,2,3),Array(4,5,6))

    arr4.foreach { arr => {

      arr.foreach(i => {

        println(i)

      })

    }}

    println("-------")

    for(arr <- arr4;i <- arr){

      println(i)

    }

    

   

数组中的方法:

 

 

list

1.    创建list

val list = List(1,2,3,4)

Ø  Nil长度为0list

2.    list遍历

foreach for

3.    list方法举例

Ø  filter:过滤元素

Ø  count:计算符合条件的元素个数

Ø  map:对元素操作

Ø  flatmap :压扁扁平,mapflat

Ø  mapflatmap的区别

val list1 = List("hello bjsxt","hello shsxt","hello gzsxt")

//1.map是一进一出,每次进去list集合中的一个元素,出来一个数组。最终把list中三个元素组成三个数组后组成一个list输出。也就是形成了一个新的list,里面元素是数组

   val result = list1.map(s=>{    s.split(" ")    })

2. flatmap是一进多出,每次进去list集合中的一个元素,出来两个字符串。flat是扁平的意思。flatMap是把list集合中每个元素切割后的每个字符串放入一个新的list集合中,最终产生一个list。(其实就是在map方法的基础上进行扁平化)。最终形成了一个新的list,里面元素都是string类型的。

   val result1 = list1.flatMap(s=>{    s.split(" ")   })

 

 

    //创建

    vallist = List(1,2,3,4,5)

   

    //遍历

    list.foreach { x => println(x)}

//    list.foreach { println}

    //filter

    vallist1  = list.filter { x => x>3 }

    list1.foreach { println}

   

    //count

    valvalue = list1.count { x => x>3 }

    println(value)

   

    //map

    valnameList = List(

         "hello bjsxt",

         "hello xasxt",

         "hello shsxt"

        )

    valmapResult:List[Array[String]] = nameList.map{ x => x.split(" ") }

    mapResult.foreach{println}   

   

    //flatmap

    valflatMapResult : List[String] = nameList.flatMap{ x => x.split(" ") }

    flatMapResult.foreach { println }

4.    list方法总结

 

set

1.    创建set

注意:set集合会自动去重

2.    set遍历

foreachfor

3.    set方法举例

Ø  交集:intersect ,&

Ø  差集: diff ,&~

Ø  子集:subsetOf

Ø  最大:max

Ø  最小:min

Ø  转成数组,toList

Ø  转成字符串:mkString(“~”)

4.    set方法总结

    //创建

    valset1 = Set(1,2,3,4,4)

    valset2 = Set(1,2,5)

    //遍历

    //注意:set会自动去重

    set1.foreach { println}

   for(s <- set1){

      println(s)

    }

    println("*******")

   /**

    * 方法举例

    */

   

   //交集

   valset3 = set1.intersect(set2)

   set3.foreach{println}

   valset4 = set1.&(set2)

   set4.foreach{println}

   println("*******")

   //差集

   set1.diff(set2).foreach { println }

   set1.&~(set2).foreach { println }

   //子集

   set1.subsetOf(set2)

  

   //最大值

   println(set1.max)

   //最小值

   println(set1.min)

   println("****")

  

   //转成数组,list

   set1.toArray.foreach{println}

   println("****")

   set1.toList.foreach{println}

  

   //mkString

   println(set1.mkString)

   println(set1.mkString("\t"))

     

set方法总结

 

 

map

1.    map创建

Ø  Map1 –>”bjsxt’

Ø  Map((1,”bjsxt”))

注意:创建map时,相同的key被后面的相同的key顶替掉,只保留一个

    valmap = Map(

      "1"->"bjsxt",

      2->"shsxt",

      (3,"xasxt")

    )

 

2.    获取map的值

Ø  map.get(“1”).get

Ø  map.get(100).getOrElse(“no value”):如果map中没有对应项,赋值为getOrElse传的值。

    //获取值

    println(map.get("1").get)

    valresult = map.get(8).getOrElse("no value")

    println(result)

3.    遍历map

Ø  for,foreach

    //map遍历

    for(x <- map){

      println("====key:"+x._1+",value:"+x._2)

    }

    map.foreach(f => {

      println("key:"+f._1+" ,value:"+f._2)

    })

4.    遍历key

Ø  map.keys

    //遍历key

    valkeyIterable = map.keys

    keyIterable.foreach { key => {

      println("key:"+key+", value:"+map.get(key).get)

    } }

    println("---------")

   

5.    遍历value

Ø  map.values

    //遍历value

    valvalueIterable = map.values

    valueIterable.foreach { value => {

      println("value: "+value)

    } }

   

6.    合并map

Ø  ++  例:map1.++(map2)  --map1中加入map2

Ø  ++:  例:map1.++:(map2) –map2中加入map1

注意:合并map会将map中的相同keyvalue替换

    //合并map

    valmap1 = Map(

      (1,"a"),   

      (2,"b"),   

      (3,"c")   

    )

    valmap2 = Map(

      (1,"aa"),

      (2,"bb"),

      (2,90),

      (4,22),

      (4,"dd")

    )

    map1.++:(map2).foreach(println)

   

7.    map中的方法举例

Ø  filter:过滤,留下符合条件的记录

Ø  count:统计符合条件的记录数

Ø  containsmap中是否包含某个key

Ø  exist:符合条件的记录存在不存在

    /**

     * map方法

     */

    //count

    valcountResult  = map.count(p => {

      p._2.equals("shsxt")

    })

    println(countResult)

   

    //filter

    map.filter(_._2.equals("shsxt")).foreach(println)

   

    //contains

    println(map.contains(2))

  

    //exist

    println(map.exists(f =>{

      f._2.equals("xasxt")

     

    }))

   

Map方法总结

 

元组

1.    元组定义

与列表一样,与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。

2.    创建元组与取值

Ø  val  tuple = new Tuple1 可以使用new

Ø  val tuple2  = Tuple1,2 可以不使用new,也可以直接写成val tuple3 =1,2,3

Ø  取值用”._XX” 可以获取元组中的值

注意:tuple最多支持22个参数

    //创建,最多支持22

    valtuple = newTuple1(1)

    valtuple2 = Tuple2("zhangsan",2)

    valtuple3 = Tuple3(1,2,3)

    valtuple4 = (1,2,3,4)

    valtuple18 = Tuple18(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)

    valtuple22 = newTuple22(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)

 

    //使用

    println(tuple2._1+"\t"+tuple2._2)

    valt = Tuple2((1,2),("zhangsan","lisi"))

    println(t._1._2)

 

3.    元组的遍历

tuple.productIterator得到迭代器,进而遍历

    //遍历

    valtupleIterator = tuple22.productIterator

    while(tupleIterator.hasNext){

      println(tupleIterator.next())

    }

4.    swap,toString方法

注意:swap元素翻转,只针对二元组

    /**

     * 方法

     */

    //翻转,只针对二元组

    println(tuple2.swap)

   

    //toString

    println(tuple3.toString())

 

trait  特性

1.    概念理解

Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。

与接口不同的是,它还可以定义属性和方法的实现。

一般情况下Scala的类可以继承多个Trait,从结果来看就是实现了多重继承。Trait(特征) 定义的方式与类类似,但它使用的关键字是 trait

2.    举例:trait中带属性带方法实现

注意:

Ø  继承的多个trait中如果有同名的方法和属性,必须要在类中使用“override”重新定义。

Ø  trait中不可以传参数

traitRead {

  valreadType = "Read"

  valgender = "m"

  defread(name:String){

    println(name+" is reading")

  }

}

 

traitListen {

  vallistenType = "Listen"

  valgender = "m"

  deflisten(name:String){

    println(name+" is listenning")

  }

}

 

class Person() extendsReadwithListen{

  overridevalgender = "f"

}

 

objecttest {

  defmain(args: Array[String]): Unit = {

    valperson = new Person()

    person.read("zhangsan")

    person.listen("lisi")

    println(person.listenType)

    println(person.readType)

    println(person.gender)

   

  }

}

 

3.    举例:trait中带方法不实现

objectLesson_Trait2 {

  defmain(args: Array[String]): Unit = {

    valp1 = new Point(1,2)

    valp2 = new Point(1,3)

    println(p1.isEqule(p2))

    println(p1.isNotEqule(p2))

  }

}

 

traitEqule{

  defisEqule(x:Any) :Boolean

  defisNotEqule(x : Any)  = {

    !isEqule(x)

  }

}

 

class Point(x:Int, y:Int) extendsEqule {

  valxx = x

  valyy = y

 

  defisEqule(p:Any) = {

    p.isInstanceOf[Point] &&p.asInstanceOf[Point].xx==xx

  }

 

}

模式匹配match

1.    概念理解:

Scala 提供了强大的模式匹配机制,应用也非常广泛。

一个模式匹配包含了一系列备选项,每个都开始于关键字 case

每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。

2.    代码及注意点

Ø  模式匹配不仅可以匹配值还可以匹配类型

Ø  从上到下顺序匹配,如果匹配到则不再往下匹配

Ø  都匹配不上时,会匹配到case _ ,相当于default

Ø  match 的最外面的”{ }”可以去掉看成一个语句

objectLesson_Match {

  defmain(args: Array[String]): Unit = {

    valtuple = Tuple6(1,2,3f,4,"abc",55d)

    valtupleIterator = tuple.productIterator

    while(tupleIterator.hasNext){

      matchTest(tupleIterator.next())

    }

   

  }

  /**

   * 注意点:

   * 1.模式匹配不仅可以匹配值,还可以匹配类型

   * 2.模式匹配中,如果匹配到对应的类型或值,就不再继续往下匹配

   * 3.模式匹配中,都匹配不上时,会匹配到 case _ ,相当于default

   */

  defmatchTest(x:Any) ={

    xmatch {

      casex:Int=> println("type is Int")

      case1 => println("result is 1")

      case2 => println("result is 2")

      case3=> println("result is 3")

      case4 => println("result is 4")

      casex:String => println("type is String")

//      case x :Double => println("type is Double")

      case _ => println("no match")

    }

  }

 

}

样例类(case classes)

1.    概念理解

使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类。实现了类构造参数的getter方法(构造参数默认被声明为val),当构造参数是声明为var类型的,它将帮你实现settergetter方法。

Ø  样例类默认帮你实现了toString,equalscopyhashCode等方法。

Ø  样例类可以new, 也可以不用new

2.    例子:结合模式匹配的代码

caseclassPerson1(name:String,age:Int)

 

objectLesson_CaseClass {

  defmain(args: Array[String]): Unit = {

    valp1 = newPerson1("zhangsan",10)

    valp2 = Person1("lisi",20)

    valp3 = Person1("wangwu",30)

   

    vallist = List(p1,p2,p3)

    list.foreach { x => {

      xmatch {

        casePerson1("zhangsan",10) => println("zhangsan")

        casePerson1("lisi",20) => println("lisi")

        case _ => println("no match")

      }

    } }

   

  }

}

Actor Model

1.    概念理解

Actor Model是用来编写并行计算或分布式系统的高层次抽象(类似java中的Thread)让程序员不必为多线程模式下共享锁而烦恼,被用在Erlang 语言上, 高可用性99.9999999 % 一年只有31ms 宕机Actors将状态和行为封装在一个轻量的进程/线程中,但是不和其他Actors分享状态,每个Actors有自己的世界观,当需要和其他Actors交互时,通过发送事件和消息,发送是异步的,非堵塞的(fire-andforget),发送消息后不必等另外Actors回复,也不必暂停,每个Actors有自己的消息队列,进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,可以建立性能很好的事件驱动系统。

Actor的特征:

Ø  ActorModel是消息传递模型,基本特征就是消息传递

Ø  消息发送是异步的,非阻塞的

Ø  消息一旦发送成功,不能修改

Ø  Actor之间传递时,自己决定决定去检查消息,而不是一直等待,是异步非阻塞的

什么是Akka

Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java Scala Actor 模型应用,底层实现就是Actor,Akka是一个开发库和运行环境,可以用于构建高并发、分布式、可容错、事件驱动的基于JVM的应用。使构建高并发的分布式应用更加容易。

spark1.6版本之前,spark分布式节点之间的消息传递使用的就是Akka,底层也就是actor实现的。1.6之后使用的netty传输。

2.    例:Actor简单例子发送接收消息

import scala.actors.Actor

 

class myActor extendsActor{

 

  defact(){

    while(true){

      receive {

        casex:String => println("save String ="+x)

        casex:Int => println("save Int")

        case _ => println("save default")

      }

    }

  }

}

 

objectLesson_Actor {

  defmain(args: Array[String]): Unit = {

   

    //创建actor的消息接收和传递

    valactor =new myActor()

    //启动

    actor.start()

    //发送消息写法

    actor!"i love you !"

 

  }

}

 

3.    例:ActorActor之间通信

caseclassMessage(actor:Actor,msg:Any)

 

class Actor1 extendsActor{

  defact(){

    while(true){

      receive{

        case  msg :Message => {

          println("i sava msg! = "+msg.msg)

         

          msg.actor!"i love you too !"

          }

        casemsg :String => println(msg)

        case  _ => println("default msg!")

      }

    }

  }

}

 

class Actor2(actor :Actor) extendsActor{

  actor!Message(this,"i love you !")

    defact(){

        while(true){

            receive{

            casemsg :String => {

              if(msg.equals("i love you too !")){

                println(msg)

               actor!"could we have a date !"

              }

            }

            case  _ => println("default msg!")

            }

        }

    }

}

 

objectLesson_Actor2 {

  defmain(args: Array[String]): Unit = {

    valactor1 = new Actor1()

    actor1.start()

    valactor2 = new Actor2(actor1)

    actor2.start()

  }

}

 

WordCount

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.rdd.RDD

import org.apache.spark.rdd.RDD.rddToPairRDDFunctions

 

objectWordCount {

  defmain(args: Array[String]): Unit = {

    valconf = new SparkConf()

    conf.setMaster("local").setAppName("WC")

    valsc = new SparkContext(conf)

    vallines :RDD[String] = sc.textFile("./words.txt")

    valword :RDD[String]  = lines.flatMap{lines => {

      lines.split(" ")

    }}

    valpairs : RDD[(String,Int)] = word.map{ x => (x,1) }

    valresult = pairs.reduceByKey{(a,b)=> {a+b}}

    result.sortBy(_._2,false).foreach(println)

   

    //简化写法

    lines.flatMap { _.split(" ")}.map { (_,1)}.reduceByKey(_+_).foreach(println)

   

  }

}

 

分享到:
评论

相关推荐

    Scala编程实战.zip

    此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景...

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    scala-parser-combinators-2.11-1.0.4-API文档-中文版.zip

    赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 赠送Maven依赖信息...

    scala-xml_2.11-1.0.4-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.4-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.4.pom; 包含翻译后的API...

    scala-compiler-2.11.8-API文档-中英对照版.zip

    赠送jar包:scala-compiler-2.11.8.jar; 赠送原API文档:scala-compiler-2.11.8-javadoc.jar; 赠送源代码:scala-compiler-2.11.8-sources.jar; 赠送Maven依赖信息文件:scala-compiler-2.11.8.pom; 包含翻译后...

    scala编程中文pdf

    scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...

    scala-xml_2.12-1.0.6-API文档-中文版.zip

    赠送jar包:scala-xml_2.12-1.0.6.jar; 赠送原API文档:scala-xml_2.12-1.0.6-javadoc.jar; 赠送源代码:scala-xml_2.12-1.0.6-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.12-1.0.6.pom; 包含翻译后的API...

    scala-parser-combinators_2.11-1.0.4-API文档-中英对照版.zip

    赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 包含翻译后的API...

    scala-java8-compat_2.11-0.7.0-API文档-中文版.zip

    赠送jar包:scala-java8-compat_2.11-0.7.0.jar; 赠送原API文档:scala-java8-compat_2.11-0.7.0-javadoc.jar; 赠送源代码:scala-java8-compat_2.11-0.7.0-sources.jar; 赠送Maven依赖信息文件:scala-java8-...

    flink-scala_2.12-1.14.3-API文档-中文版.zip

    赠送jar包:flink-scala_2.12-1.14.3.jar 赠送原API文档:flink-scala_2.12-1.14.3-javadoc.jar 赠送源代码:flink-scala_2.12-1.14.3-sources.jar 包含翻译后的API文档:flink-scala_2.12-1.14.3-javadoc-API...

    scala-sbt-scala编译工具

    scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...

    flink-scala-2.11-1.10.0-API文档-中文版.zip

    赠送jar包:flink-scala_2.11-1.10.0.jar; 赠送原API文档:flink-scala_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-scala_2.11-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-scala_2.11-1.10.0.pom; ...

    scala五本经典资料集合

    scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含&lt;ScalaQuery_Commerzbank_2011&gt;&lt;twitter-...

    scala 3本书打包

    这个打包文件中包含了《SCALA程序设计-JAVA虚拟机多核编程实战》《Scala编程-中文-完整版》《Scala in Action》三本书,足以让你从scala入门到精通,让我们一起愉快的学习吧。spark,scala醉了醉了。哈哈

    SCALA编程思想 原书第2版 PDF 下载

    本书介绍Scala的基础特性,采用短小精悍的“原子”解构Scala语言的元素和方法。一个“原子”即为一个小型知识点,通过代码示例引导读者逐步领悟Scala的要义,结合练习鼓励读者在实践中读懂并写出地道的Scala代码。...

    scala-compiler-2.12.7-API文档-中文版.zip

    赠送jar包:scala-compiler-2.12.7.jar; 赠送原API文档:scala-compiler-2.12.7-javadoc.jar; 赠送源代码:scala-compiler-2.12.7-sources.jar; 赠送Maven依赖信息文件:scala-compiler-2.12.7.pom; 包含翻译后...

    差分进化算法的Scala实现_Scala_代码_下载

    差分进化算法的Scala实现_Scala_代码_下载

    Scala 初学者指南

    Scala 初学指南 这本书是什么 本书是 The Neophyte's Guide to Scala 的中文翻译。 The Neophyte's Guide to Scala 是 Daniel Westheide 写的一系列有关 Scala 的文章。 ------------------------------------------...

    flink-1.14.4-scala_2.12 + CDH6.2.1 版 parcel 包

    flink-1.14.4-scala_2.12 + CDH6.2.1 版 parcel 包, 包含 FLINK-1.14.4-BIN-SCALA_2.12-el7.parcel FLINK-1.14.4-BIN-SCALA_2.12-el7.parcel.sha manifest.json (以上三个文件放入 /opt/cloudera/parcel-repo/ 下...

Global site tag (gtag.js) - Google Analytics