2016-12-01 4 views
0

У меня есть три выделенных rdd [mllib .... вектора], и мне нужно объединить их как один rdd [вектор mllib].Искра (scala) три разделенных rdd [org.apache.spark.mllib.linalg.Vector] до одного 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 _... ничего, кроме DenseVector от ветра Lib в случае нормализации (х/макс (х))

Теперь мне нужно, чтобы сделать их все как один Я получаю ([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]) === to ===> [- 0.33536545781646926,0.1282051282051282, 1.0], и поэтому я могу передать его KMeans ... надеюсь, это поможет ... спасибо заранее –

ответ

0

наконец-то я нашел ... я не знаю, если это лучшее.

У меня был набор трехмерных данных, и мне нужно было выполнить нормализацию x/max (x) на двух измерениях и применить standardScaler к другому измерению. Моя проблема заключалась в том, что в конце у меня было 3 разделенных вектора типа: например [[1.0], [4,0], [5.0]] [[2.0], [5.0], [6.0]] .... ............ но мне нужно [1,0,4,0,5,0], которое можно передать в KMeans. i изменил приведенный выше код как:

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))) 
Смежные вопросы