我知道错误了
构造ClassDict的预期零参数(用于pyspark.mllib.linalg.DenseVector)
通过尝试这样做:
我有一个函数,我将其转换为udf,用于从dataframe转换列的值。如下所示:
def func(vector):
#does something
return Vector.dense(vector)
udfunc = udf(func, ArrayType(FloatType()))
new_df = df.withColumn("vector",func(df.vector))
new_df.show()列df.vector具有denseVector值。
有谁想解决这个问题或者暗示吗?
提前谢谢
发布于 2016-07-07 15:51:59
考虑到您提供的部分,很明显的问题是您声明了不正确的返回类型。Vector的催化剂类型是VectorUDT而不是ArrayType(FloatType())
from pyspark.mllib.linalg import Vectors, VectorUDT
from pyspark.sql.types import ArrayType, FloatType
from pyspark.sql.functions import udf
dummy_udf = udf(lambda _: Vectors.dense([0, 0, 0]), VectorUDT())
sc.parallelize([(Vectors.dense([1, 1, 1]), )]).toDF(["x"]).select(dummy_udf("x"))在Spark2.0和更高版本中,使用pyspark.ml.linalg实现与pyspark.ml API的兼容性。
https://stackoverflow.com/questions/38249291
复制相似问题