У меня есть кадр данных искры, содержащий плотные векторы в виде столбцов 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()