色婷五一,精品亚洲欧美一区二区三区日产 ,精选国产AV剧情,无码丰满少妇2在线观看

18600329666

咨詢技術專家

掃一掃
與技術專家在線溝通

Menu
spark機器學習開發(fā)之scala函數(shù)及基礎語法
一、scala函數(shù)的基本使用
scala函數(shù)是編程思想是scala語言的核心,類似pytho語言,區(qū)別于java,C++等語言,大數(shù)據(jù)及機器學習框架spark源碼中大量使用函數(shù)式變成方法

1.函數(shù)的定義
使用等等號定義,方法體使用{}
def hsmc(x:Int,y:Int) = {
var c = x*y;
c+1; //最后一行的結果為返回值
}
使用等等號定義,方法體只有簡單的一句省略{}
def hsmcj(x:Int,y:Int) = x*y;
2.匿名函數(shù)
使用=>定義匿名函數(shù),方法體只有簡單的一句,調(diào)用時使用被賦值的變量或常量名作為方法名
val fun = (x:Int,y:Int)=>x*y;
使用=>定義匿名函數(shù),方法體使用{},調(diào)用時使用被賦值的變量或常量名作為方法名
val fun = (x:Int,y:Int)=>{var c = x*y;c+22}
3.函數(shù)作為變量傳遞給另外一個函數(shù)
val funss = (x:Int) =>x+"hhhhhhh";
def getName(func:Int=>String,name:String){   func(name)   }
func:Int=>String為getName的形參,Int=>String為函數(shù)類型
調(diào)用:getName(funss,"羲和時代")
4.函數(shù)的柯里化
是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)的函數(shù),即將多個參數(shù)的函數(shù) 
轉(zhuǎn)化為單個參數(shù)的函數(shù)鏈
def adds(x:Int,y:Int) = {x*y};
柯里化之后為
def adds = (x:int)(y:Int) = {x*y}
5.scala偏應用函數(shù)
Scala 偏應用函數(shù)是一種表達式,你不需要提供函數(shù)需要的所有參數(shù),只需要提供部
分,或不提供所需參數(shù)。 
def cadd(x:Int)(y:Int) = x+y;
var plusone = cadd(1)_ //_匹配cadd(x:Int)后的所有內(nèi)容 ,該函數(shù)完成了每次+1
plusone(2) //2+1
二、scala_的用法
1.導入包時,表示匹配所有,import java.util._類似于java的*
2.類成員的默認賦值(其實是不賦值讓jvm去賦值)
class test{
var tv = _;
}
3.將集合的每個元素作為實參傳遞給函數(shù)
printArgs(List("a", "b"): _*) 
4. 作為類型通配符,類似于java泛型的?
def printList(list: List[_])
5.在模式匹配中表示所有,類似于*號
case _ =>"所有"
6.簡寫函數(shù)字面量
如果函數(shù)參數(shù)在函數(shù)體類只出現(xiàn)一次則可以用_代替
list.filter(_ > 0)等價于list.filter(x => x > 0)
二、scala操作spark初步
1.scala創(chuàng)建sparkContext
     引入包
     import org.apache.spark.SparkContext
     import org.apache.spark.SparkConf
     創(chuàng)建
     val conf = new SparkConf().setAppName("Simple Application")
     val sc = new SparkContext(conf)
2.scala spark讀取txt文件內(nèi)容(sc 為sparkContext)
     讀取:var txt = sc.textFile("/springhdfs/stest.txt");   //存放在hdfs上,讀取到的數(shù)據(jù)為rdd
     顯示:txt.take(10),顯示前10個
     rdd轉(zhuǎn)化為Vectors
     import  org.apache.spark.mllib.{stat,linalg}    //引入統(tǒng)計與線性代數(shù)的包
     var datass = txt.flatMap(_.split(",")).map(value => linalg.Vectors.dense(value.toDouble))
     統(tǒng)計
     var ss=  stat.Statistics.colStats(datass)
      ss.max 最大值,ss.min 最小值
      或過濾
     datass .filter(_>100)過濾出大于100的數(shù)值