Apache spark Spark中高效的余弦相似性计算
有几种方法可以计算Spark ML向量与Spark DataFrame列中每个ML向量之间的余弦相似性,然后进行排序以获得最高结果。但是,我想不出比在Spark ML Word2Vec模型中替换Apache spark Spark中高效的余弦相似性计算,apache-spark,pyspark,apache-spark-ml,Apache Spark,Pyspark,Apache Spark Ml,有几种方法可以计算Spark ML向量与Spark DataFrame列中每个ML向量之间的余弦相似性,然后进行排序以获得最高结果。但是,我想不出比在Spark ML Word2Vec模型中替换/data/,然后使用.findSynonyms()更快的方法。问题是Word2Vec模型完全保存在驱动程序中,如果要比较的数据集太大,则可能会导致内存问题 有没有比我下面介绍的更有效的方法 Word2Vec模型的数据是否可以分布在集群中 能否修改.findSynonyms()以生成一个能够在整个sp
/data/
,然后使用.findSynonyms()
更快的方法。问题是Word2Vec模型完全保存在驱动程序中,如果要比较的数据集太大,则可能会导致内存问题
.findSynonyms()
以生成一个能够在整个spark数据帧上高效运行的spark sql函数
#vecIn=与“vectors”列具有相同维度的向量
def cosSim(世界其他地区,vecIn):
返回(
元组((Vectors.dense(Vectors.dense(row.Vectors.dot(vecIn))/
(Vectors.densite(np.sqrt(row.Vectors.dot(row.Vectors)))*
向量.稠密(np.sqrt(向量点(向量‘‘)’))
).toArray().tolist())
df.rdd.map(lambda行:cosSim(行,向量)).toDF(['cosSim']).show(truncate=False)
spark.createDataFrame(
IndexedRowMatrix(df.rdd.map(lambda行:(row.vectors.toArray()))
.toBlockMatrix()
.transpose()
.toIndexedRowMatrix()
(1.参赛作品)
##然后过滤结果(未显示)
/data/
,然后加载“修订”模型并使用.findSynonyms()
:df\u words\u vectors.schema
##StructType(列表(StructField(word、StringType、true)、StructField(vector、ArrayType(FloatType、true)、true)))
df_words_vectors.write.parquet(“exiting_Word2Vec_model/data/”,mode='overwrite')
新建Word2Vec\u模型=Word2VecModel.load(“退出Word2Vec\u模型”)
##vecIn=与Word2Vec模型/数据上保存的数据框中的“vector”列具有相同维度的向量/
new_Word2Vec_model.findSynonyms(vecIn,20.show())