Аз получавам следната грешка, опитвайки се да изградя ML Pipeline
:
pyspark.sql.utils.IllegalArgumentException: "requirement failed: Column features must be of type org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7 but was actually ArrayType(DoubleType,true)."
мой features
колона съдържа масив от стойности с плаваща запетая. Това звучи като аз трябва да конвертирате тези към някакъв вид на вектор (това не е рядко, така че DenseVector?). Има ли начин да направите това директно на DataFrame или трябва да конвертирате в RDD?
Отговори:
13 за отговор № 1Можете да използвате UDF:
udf(lambda vs: Vectors.dense(vs), VectorUDT())
В импортиране на Spark <2.0:
from pyspark.mllib.linalg import Vectors, VectorUDT
В импортиране на Spark 2.0+:
from pyspark.ml.linalg import Vectors, VectorUDT
Моля, имайте предвид, че тези класове не са съвместими въпреки идентичното изпълнение.
Възможно е също така да се извличат отделни елементи и да се сглобяват VectorAssembler
, Ако се приеме, че се въвежда колона за въвеждане features
:
from pyspark.ml.feature import VectorAssembler
n = ... # Size of features
assembler = VectorAssembler(
inputCols=["features[{0}]".format(i) for i in range(n)],
outputCol="features_vector")
assembler.transform(df.select(
"*", *(df["features"].getItem(i) for i in range(n))
))