1

我對Spark還是比較新的,我正在努力實現迭代函數。我希望有人能幫助我?Spark重複函數CUSUM

特別是,我試圖實現CUSUM控制統計:

$ S_I = \ MAX(0,S_ {I-1} + X_I - 目標 - 含$以$ S_0 = 0 $和$瓦特,目標$固定參數。

的挑戰是,CUSUM統計量定義爲迭代函數需要有序數據和前一函數值。

下面的數據幀顯示所期望的輸出對於$ Target = 1 $和$ w = 0.1 $:

i x S 
-------------- 
1 1.3 0.2 
2 1.8 0.9 
3 0.5 0.3 
4 0.6 0 
5 1.2 0.1 
6 1.8 0.8 

在不同的說明:我想這是不可能以分佈式方式運行CUSUM?我的數據集相當大,但包含多個組。我希望這意味着我仍然可以實現一些併發。我想我必須重新分區我的數據,讓每個組有一個分區才能同時爲每個組運行CUSUM算法?

我希望這是有道理的,任何指針都非常感謝! 理想情況下,我正在尋找一個解決方案在斯卡拉和火花2.1

非常感謝!

回答

0

很多谷歌的研究後,我發現使用mapPartitions

val dataset = Seq(1.3, 1.8, 0.5, 0.6, 1.2, 1.8).toDS 

dataset.repartition(1).mapPartitions(iterator => { 
    var s = 0.0 
    val target = 1.0 
    val w = 0.1 
    iterator.map(x => { 
     s = Math.max(0.0, s + x -target - w) 
     Math.round(10.0 *s)/10.0 
    }) 
}).show() 

+-----+ 
|value| 
+-----+ 
| 0.2| 
| 0.9| 
| 0.3| 
| 0.0| 
| 0.1| 
| 0.8| 
+-----+ 

我希望這一段時間救一個人在未來的問題的解決方案。