Apache spark spark中两列密集向量点积的求法

Apache spark spark中两列密集向量点积的求法,apache-spark,pyspark,distributed-computing,word2vec,cosine-similarity,Apache Spark,Pyspark,Distributed Computing,Word2vec,Cosine Similarity,我有一个spark数据框,包含密集向量,如colu W_DensV1和Col_W_DenseV2列,现在我想计算它们之间的余弦相似性,因此需要点积。我目前正在使用UDF并执行行操作,速度非常慢,并且只使用一个内核进行操作。有人能提出更好的方法来实现这一点吗 我的火花数据帧 Col1 | Col2 | Col|W|u DensV1 | Col|W|u DenseV2 a | b |[0.1 0.1 0.2..]|[0.3 0.5 0.8..] 需要在列级别而不是行级别使用x.Dot(y)并并行化

我有一个spark数据框,包含密集向量,如colu W_DensV1和Col_W_DenseV2列,现在我想计算它们之间的余弦相似性,因此需要点积。我目前正在使用UDF并执行行操作,速度非常慢,并且只使用一个内核进行操作。有人能提出更好的方法来实现这一点吗

我的火花数据帧
Col1 | Col2 | Col|W|u DensV1 | Col|W|u DenseV2
a | b |[0.1 0.1 0.2..]|[0.3 0.5 0.8..]
需要在列级别而不是行级别使用
x.Dot(y)
并并行化

我当前的功能(行级别)需要数百万年才能在数据上运行!!
@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()