Рассчитайте косинусное расстояние между двумя столбцами в Spark - PullRequest
0 голосов
/ 14 июля 2020

Я использую Python и Spark для решения проблемы. У меня есть фрейм данных, содержащий два столбца в фрейме данных Spark. Каждый из столбцов содержит скаляр типа numeri c (например, double или float).

Я хочу интерпретировать эти два столбца как вектор и вычислить сходство consine между их. Sofar Я нашел только искровую линейную алгебру, которую можно использовать для плотного вектора, расположенного в ячейке фрейма данных.

образец кода

Код в numpy

import numpy as np
from numpy.linalg import norm
vec = np.array([1, 2])
vec_2 = np.array([2, 1])
angle_vec_vec = (np.dot(vec, vec))/(norm(vec * norm(vec)))
print(angle_vec_vec )

Результат должен 0.8

Как это сделать в Spark?

df_small = spark.createDataFrame([(1, 2), (2, 1)])
df_small.show()

Есть ли способ преобразовать столбец двойных значений в плотный вектор? Видите ли вы другое решение моей проблемы?

1 Ответ

0 голосов
/ 14 июля 2020

Вы можете увидеть здесь образец, который вычисляет косинусное расстояние в Scala. Стратегия состоит в том, чтобы представить документы как RowMatrix, а затем использовать его метод columnSimilarities ().

Если вы хотите использовать PySpark, вы можете попробовать то, что предлагается здесь

...