pyspark 期望构造 ClassDict 的参数为零(pyspark.mllib.linalg.DenseVector)
pyspark expected zero arguments for construction of ClassDict (for pyspark.mllib.linalg.DenseVector)
我收到错误
expected zero arguments for construction of ClassDict (for pyspark.mllib.linalg.DenseVector)
试试这个:
我有一个函数,我将其转换为 udf,用于转换数据帧中列的值。像这样:
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 值。
有没有人有解决这个问题的想法或提示?
提前致谢
鉴于您提供的部分,明显的问题是您声明的 return 类型不正确。 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"))
Spark 2.0及以后使用pyspark.ml.linalg
实现与pyspark.ml
的兼容API.
我收到错误
expected zero arguments for construction of ClassDict (for pyspark.mllib.linalg.DenseVector)
试试这个:
我有一个函数,我将其转换为 udf,用于转换数据帧中列的值。像这样:
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 值。
有没有人有解决这个问题的想法或提示?
提前致谢
鉴于您提供的部分,明显的问题是您声明的 return 类型不正确。 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"))
Spark 2.0及以后使用pyspark.ml.linalg
实现与pyspark.ml
的兼容API.