2016-12-01 8 views
0

に分けました。私は3つの分離したrdd [mllib .... vectors]を持っています。 1つのrdd [mllibベクトル]。spark(scala)3つの分離したrdd [org.apache.spark.mllib.linalg.Vector]を1つのrdd [Vector]

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 /最大(x))を

今私はそれらを確認する必要があり私は([1。]、[2。]、[3。])と[[1。]、[2。]、[3。]] を手に入れます。 しかし、私は[1.、 3]を1つのベクトルとして

+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])=== to ===> [ - 0.33536545781646926,0.1282051282051282のように単一のベクトルとしてマップする必要があります。 1.0]と私はKMeansに渡すことができます...私はこれが助けて欲しい...事前に感謝 –

答えて

0

最終的に私は見つけました...これが最高であるかどうかはわかりません。

私は3dデータセットを持っていました.2次元でx/max(x)正規化を実行し、standardScalerを別の次元に適用する必要がありました。 私の問題は、最終的に私は3つのベクトルを持っていたということでした: [[1.0]、[4,0]、[5.0]] [[2.0]、[5.0]、[6.0]] .... ............しかし、私はKMeansに渡すことができる[1.0,4.0,5.0]が必要でした。 上記のコードを次のように変更しました:

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)))