2016-12-01 65 views
0

我有三個分離的rdd [mllib ....矢量],我需要將它們合併爲一個rdd [mllib矢量]。spark(scala)三個單獨的rdd [org.apache.spark.mllib.linalg.Vector]到單個rdd [矢量]

val vvv = my_ds.map(x=>(scaler.transform(Vectors.dense(x(0))),Vectors.dense((x(1)/bv_max_2).toArray),Vectors.dense((x(2)/bv_max_1).toArray))) 

更多信息: 縮放=> StandardScaler bv_max _...不過從微風lib中DenseVector的情況下,用於標準化(X/MAX(X))

現在我需要讓他們所有作爲一個 我得到([1。],[2。],[3。])和[[1。],[2。],[3。]] 但我需要[1,2。, 3.]作爲一個載體

+0

您能分享一個示例數據集嗎?截至目前,您的代碼不可重現。 – mtoto

+0

上述代碼生成此: ([-1.0879352081573068],[0.1282051282051282],[1.0]) ([-0.33536545781646926],[0.1282051282051282],[1.0])............和數據集部分===> val my_ds = raw_ds.map(x => Vectors.dense(x.days,x.freq,x.food)),這是raw_data的示例===> 23,5,2 ......但是我需要將上面的vvv組合成一個單獨的向量([-0.33536545781646926],[0.1282051282051282],[1.0])=== ===> [ - 0.33536545781646926,0.1282051282051282, 1.0],所以我可以將它傳遞給KMeans ...我希望這可以幫助...提前謝謝你 –

回答

0

終於我找到了......我不知道這是否是最好的。

我有3D數據集,我需要在兩個維度上執行x/max(x)規範化並將standardScaler應用到另一個維度。 我的問題是,最後我有3個分離的向量,如: [[1.0],[4,0],[5.0]] [[2.0],[5.0],[6.0]] .... ............但我需要[1.0,4.0,5.0]這可以傳遞給KMeans。 我將上面的代碼更改爲:

val vvv = dsx.map(x=>scaler.transform(Vectors.dense(x.days_d)).toArray ++ (x.freq_d/bv_max_freq).toArray ++ (x.food_d/bv_max_food).toArray).map(x=>Vectors.dense(x(0),x(1),x(2)))