Тип данных ArrayType(FloatType,false) не поддерживается - совместная фильтрация

Я изучаю систему рекомендаций, я хочу передать userFactor и itemFactor, созданные в модели ALS, K-средствам, но k-средства хотят 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)

1 ответ

Вы можете попробовать написать UDF и извлечь из него значения, прежде чем передавать их в VectorAssembler.

UserDefinedFunction mode = udf((Seq<String> array, fromIndex int, toIndex int) -> array.slice(fromIndex ,toIndex ).mkString(","));
Другие вопросы по тегам