Apache spark Spark中高效的余弦相似性计算

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

有几种方法可以计算Spark ML向量与Spark DataFrame列中每个ML向量之间的余弦相似性,然后进行排序以获得最高结果。但是,我想不出比在Spark ML Word2Vec模型中替换
/data/
,然后使用
.findSynonyms()
更快的方法。问题是Word2Vec模型完全保存在驱动程序中,如果要比较的数据集太大,则可能会导致内存问题

  • 有没有比我下面介绍的更有效的方法

  • Word2Vec模型的数据是否可以分布在集群中

  • 能否修改
    .findSynonyms()
    以生成一个能够在整个spark数据帧上高效运行的spark sql函数

  • 我尝试过的方法:

  • rdd功能:
  • #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.参赛作品)
    ##然后过滤结果(未显示)
    
  • 用my own替换Word2Vec模型
    /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())