服務近2000家企業(yè),依托一系列實踐中打磨過的技術和產(chǎn)品,根據(jù)企業(yè)的具體業(yè)務問題和需求,針對性的提供各行業(yè)大數(shù)據(jù)解決方案。
spark機器學習開發(fā)之scala函數(shù)及基礎語法
來源:未知 時間:2018-33-13 瀏覽次數(shù):137次
一、scala函數(shù)的基本使用
scala函數(shù)是編程思想是scala語言的核心,類似pytho語言,區(qū)別于java,C++等語言,大數(shù)據(jù)及機器學習框架spark源碼中大量使用函數(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_的用法
二、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)一次則可以用_代替
如果函數(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ù)值
- 上一篇: 三維網(wǎng)格物體識別技術
- 下一篇: spark機器學習基礎統(tǒng)計學知識