您好,登錄后才能下訂單哦!
Scala語(yǔ)言中如何結(jié)合demo和spark講實(shí)現(xiàn)鏈?zhǔn)接?jì)算,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
一,什么是鏈?zhǔn)接?jì)算
1,一般開(kāi)發(fā)習(xí)慣把事情封裝到一個(gè)方法中;鏈?zhǔn)骄幊趟枷胧前岩龅氖虑榉庋b到block中,給外部提供一個(gè)返回這個(gè)block的方法
2,鏈?zhǔn)骄幊趟枷敕椒ㄌ攸c(diǎn):方法的返回值必須是block,block的參數(shù)是需要操作的內(nèi)容,block的返回值是返回這個(gè)block的方法的調(diào)用者
二,舉例說(shuō)明
比如我們定義個(gè)case class Person
case class Person(private val parent: Person = null ,private val name: String = null , private var age: Int = 0 ) {
def setName(newName: String) = new Person( this,newName, this.age )
def setAge(newAge: Int) :this.type = {
this.age = newAge;
this
}
def introduce {parentIntroduce; println( s"Hello, my name is $name and I am $age years old." ) }
def parentIntroduce { if(parent!=null)parent.introduce }
}
那么,我們可以執(zhí)行下面操作:
Person(null,"kitty",45) .setName("Peter").setAge(41).setName("Peter1").setAge(21).introduce
執(zhí)行的結(jié)果
Hello, my name is kitty and I am 45 years old.
Hello, my name is Peter and I am 41 years old.
Hello, my name is Peter1 and I am 21 years old.
其實(shí),我這里是有個(gè)陷阱,比如我現(xiàn)在換一種順序調(diào)用(第一次調(diào)用setAge和setName互換),如下:
Person(null,"kitty",45) .setAge(41).setName("Peter").setName("Peter1").setAge(21).introduce
那么結(jié)果就會(huì)變成下面的樣子:
Hello, my name is kitty and I am 41 years old.
Hello, my name is Peter and I am 41 years old.
Hello, my name is Peter1 and I am 21 years old.
三,總結(jié)
之所以會(huì)出現(xiàn)上面兩種結(jié)果,是由于我們的setAge操作是執(zhí)行之后返回的是對(duì)象本身,而setName操作又重新new 了一個(gè)對(duì)象。
由此,我們可以類(lèi)比到RDD的操作。之前,群友問(wèn)過(guò)這樣一個(gè)問(wèn)題:
RDD.repartiton(12)
RDD的分區(qū)為啥不變成12呢?
實(shí)際上是由于RDD的所有轉(zhuǎn)換算子都是新生成了一個(gè)RDD,而不是將函數(shù)作用于自身。
其實(shí),還有一種鏈?zhǔn)接?jì)算的實(shí)現(xiàn)方式是執(zhí)行函數(shù)返回的是一個(gè)固定的類(lèi)型,而不一定是調(diào)用者自身或者同父類(lèi)的實(shí)現(xiàn)對(duì)象。比如,Dataset最終執(zhí)行的實(shí)現(xiàn)函數(shù)的返回就是固定類(lèi)型:RDD[InternalRow],而不是Dataset。
看完上述內(nèi)容,你們掌握Scala語(yǔ)言中如何結(jié)合demo和spark講實(shí)現(xiàn)鏈?zhǔn)接?jì)算的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。