Как получить скалярное произведение двух столбцов, содержащих плотные векторы в искре - PullRequest
1 голос
/ 05 мая 2020

У меня есть кадр данных искры, содержащий плотные векторы в виде столбцов Col_W_DensV1 и Col_w_DenseV2, и теперь я хочу вычислить косинусное сходство между ними и, следовательно, мне нужен точечный продукт. В настоящее время я использую UDF и выполняю операции со строками, и он невероятно медленный и использует только 1 ядро ​​для операций. Может ли кто-нибудь предложить лучший способ добиться этого?

My Spark Dataframe

Col1  | Col2 | Col_W_DensV1   | Col_w_DenseV2  
a     | b    | [0.1 0.1 0.2..]| [0.3 0.5 0.8..] 

Требуется x.Dot(y) на уровне столбца вместо уровня строки и распараллеливать

My Current function (Row-Level) Требуется миллиарды лет, чтобы работать с данными !!

@udf("double")def cosim(x, y):
    import numpy as np
    return float(x.dot(y) / np.sqrt(x.dot(x)) /np.sqrt(y.dot(y)))
    cs_table1 = cs_table.withColumn("similarity",cosim(cs_table.p_result,cs_table.result))
    cs_table1.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...