pyspark行矩阵失败:DataFrame必须具有单个向量类型列

lndjwyie  于 2023-01-01  发布在  Spark
关注(0)|答案(1)|浏览(175)

我有一个字符串列和列表列的表:

  1. app vector
  2. facebook [1,2,3]
  3. instagram [4,5,6]
  4. whatsapp [7,8,9]

我想计算每两个应用程序之间的余弦相似度,所以我尝试将向量列转换为RowMatrix:

  1. mat = RowMatrix(app_vectors_df.select("vector"))
  2. cosine_similarities = mat.columnSimilarities()

但是,我不断得到这个错误:

  1. pyspark.sql.utils.IllegalArgumentException: requirement failed: DataFrame must have a single vector type column

如果我尝试将列表转换为密集向量,我会得到以下错误:

  1. TypeError: Cannot convert type <class 'pyspark.ml.linalg.DenseVector'> into Vector

我不知道该怎么做。

wa7juj8i

wa7juj8i1#

方法中存在错误。请尝试转换为RDD:
对于稀疏向量:

  1. from pyspark.mllib.linalg import Vectors
  2. mat = RowMatrix(app_vectors_df.select("vector").rdd.map (lambda x: Vectors.sparse(x[0].size, x[0].indices, x[0].values)))

对于密集矢量:

  1. from pyspark.mllib.linalg import Vectors
  2. mat = RowMatrix(app_vectors_df.select("vector").rdd.map (lambda x: Vectors.dense(x[0].toArray())

相关问题