У меня есть входной фрейм данных input_df
как:
+---------------+--------------------+
|Main_CustomerID| Vector|
+---------------+--------------------+
| 725153|[3.0,2.0,6.0,0.0,9.0|
| 873008|[4.0,1.0,0.0,1.0,...|
| 625109|[1.0,0.0,6.0,1.0,...|
| 817171|[0.0,4.0,0.0,7.0,...|
| 611498|[1.0,0.0,4.0,5.0,...|
+---------------+--------------------+
input_df
имеет тип схемы,
root
|-- Main_CustomerID: integer (nullable = true)
|-- Vector: vector (nullable = true)
Ссылаясь на Рассчитать кадр данных искры косинусного сходства , я создал индексированную матрицу строк, а затем сделал:
val lm = irm.toIndexedRowMatrix.toBlockMatrix.toLocalMatrix
чтобы найти косинусное сходство между столбцами. Теперь у меня есть результирующая матрица mllib
,
cosineSimilarity: org.apache.spark.mllib.linalg.Matrix =
0.0 0.4199605255658081 0.5744269579035528 0.22075539284417395 0.561434614044346
0.0 0.0 0.2791452631195413 0.7259079527665503 0.6206918387272496
0.0 0.0 0.0 0.31792539222893695 0.6997167152675132
0.0 0.0 0.0 0.0 0.6776404124278828
0.0 0.0 0.0 0.0 0.0
Теперь мне нужно преобразовать этот lm
типа org.apache.spark.mllib.linalg.Matrix
в кадр данных. Я ожидаю, что мой вывод dataframe
будет выглядеть следующим образом:
+---+------------------+------------------+-------------------+------------------+
| _1| _2| _3| _4| _5|
+---+------------------+------------------+-------------------+------------------+
|0.0|0.4199605255658081|0.5744269579035528|0.22075539284417395| 0.561434614044346|
|0.0| 0.0|0.2791452631195413| 0.7259079527665503|0.6206918387272496|
|0.0| 0.0| 0.0|0.31792539222893695|0.6997167152675132|
|0.0| 0.0| 0.0| 0.0|0.6776404124278828|
|0.0| 0.0| 0.0| 0.0| 0.0|
+---+------------------+------------------+-------------------+------------------+
Как я могу сделать это в Scala?