0

我正在学习推荐系统,我想将在 ALS 模型中创建的 userFactor 和 itemFactor 传递给 K-means,但 k-means 想要 VectorUDT 但我从模型中得到了 ArrayType(FloatType)。

我也试图将 userFactor 传递给向量汇编器,然后创建一个向量到 k-means 但同样的错误出现帮助。

在这方面是新的。

from pyspark.sql.types import IntegerType
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler


userFactorsDF= alsmodel.userFactors.select("features")

vecAssembler = VectorAssembler(inputCols=["features"], outputCol="features")
featuresdf = vecAssembler.transform(userFactorsDF)

kmeans = KMeans().setK(2).setSeed(1)
model1 = kmeans.fit(featuresdf)


ERROR

IllegalArgumentException: u'Data type ArrayType(FloatType,false) is not supported.'
---------------------------------------------------------------------------
IllegalArgumentException                  Traceback (most recent call last)
<ipython-input-77-05324b5cde72> in <module>()
      7 vecAssembler = VectorAssembler(inputCols=["features"], outputCol="features")
      8 
----> 9 featuresdf = vecAssembler.transform(userFactorsDF)
     10 
     11 kmeans = KMeans().setK(2).setSeed(1)
4

1 回答 1

-1

您可以尝试编写 UDF 并从中提取值,然后再将其传递给 VectorAssembler。

UserDefinedFunction mode = udf((Seq<String> array, fromIndex int, toIndex int) -> array.slice(fromIndex ,toIndex ).mkString(","));
于 2018-11-06T05:38:26.893 回答