簡體   English   中英

在scala函數中更新參數

[英]update parameter in scala function

在spark mllib天真的貝葉斯代碼中,如何做到這一點?

c._2 += v.toBreeze

v: Vector是mergeValue函數的參數,我們不能重新分配val 但是,為什么源代碼中有c._2 += v.toBreeze

這是源代碼:

mergeValue = (c: (Long, BDV[Double]), v: Vector) => {
    requireNonnegativeValues(v)
    (c._1 + 1L, c._2 += v.toBreeze)},

它的編寫方式不是分配,而是一種返回添加了元素的新向量的方法。 本質上, c._2 += v.toBreeze更正式地寫為(c._2).+=(v.toBreeze)

如果查看breeze.linalg.DenseVector的API( BDV類的別名),您會注意到有一個+=方法,該方法在向量前加上一個元素。 這是在這種情況下應用的方法。

回到您的示例,這意味着所討論的代碼( c._1 + 1L combineByKey()的第二個參數正在創建一個函數,該函數遞增Longc._1 + 1L )並聚合org.apache.spark.mllib.linalg.Vector轉換為breeze.linalg.DenseVectorc._2 += v.toBreeze )。矢量聚合的發生方式是+=方法返回新的DenseVector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM