2016-10-10 55 views
0

我想將一個UDF應用於包含SparseVectors(使用pyspark.ml.feature.IDF創建)的PySpark df中的列。最初,我試圖應用更多涉及的功能,但是對於任何功能的應用程序都會遇到同樣的錯誤。因此,對於一個例子的緣故:將UDF應用於Spark 2.0中的SparseVector列

udfSum = udf(lambda x: np.sum(x.values), FloatType()) 
df = df.withColumn("vec_sum", udfSum(df.idf)) 
df.take(10) 

我收到此錯誤:如果我轉換使用df熊貓和應用功能

Py4JJavaError: An error occurred while calling 
z:org.apache.spark.sql.execution.python.EvaluatePython.takeAndServe. 
: org.apache.spark.SparkException: Job aborted due to stage failure: 
Task 0 in stage 55.0 failed 4 times, most recent failure: Lost task 0.3 
in stage 55.0 (TID 111, 10.0.11.102): net.razorvine.pickle.PickleException: 
expected zero arguments for construction of ClassDict (for numpy.dtype) 

,我可以證實,FloatType()是正確的響應類型。這可能是相關的,但錯誤是不同的:Issue with UDF on a column of Vectors in PySpark DataFrame

謝謝!

回答

1

轉換輸出float

udf(lambda x: float(np.sum(x.values)), FloatType()) 
+0

工作就像一個魅力! – abbbby

相關問題