关注this example我已为某些文档计算了TF-IDF权重。现在我想使用RowMatrix
来计算文档的相似性。但我无法将数据拟合成正确的格式。我现在拥有的是一个DataFrame,其行(String,SparseVector)作为两列'类型。我应该将其转换为RDD[Vector]
,我认为这很简单:
features.map(row => row.getAs[SparseVector](1)).rdd()
但是我收到了这个错误:
<console>:58: error: Unable to find encoder for type stored in a
Dataset. Primitive types (Int, String, etc) and Product types (case
classes) are supported by importing spark.implicits._ Support for
serializing other types will be added in future releases.
导入spark.implicits._
没有任何区别。
那是怎么回事?我很惊讶Spark并不知道如何编码自己的矢量数据类型。
答案 0 :(得分:1)
只需在RDD
之前转换为map
。
import org.apache.spark.ml.linalg._
val df = Seq((1, Vectors.sparse(1, Array(), Array()))).toDF
df.rdd.map(row => row.getAs[Vector](1))