溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Scala語(yǔ)言中如何結(jié)合demo和spark講實(shí)現(xiàn)鏈?zhǔn)接?jì)算

發(fā)布時(shí)間:2021-11-15 16:56:34 來(lái)源:億速云 閱讀:158 作者:柒染 欄目:大數(shù)據(jù)

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è)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI