7

मैं एक एमएल Pipeline बनाने की कोशिश निम्न त्रुटि हो रही है:PySpark DataFrame में ArrayType से DenseVector को कैसे परिवर्तित करें?

pyspark.sql.utils.IllegalArgumentException: 'requirement failed: Column features must be of type [email protected] but was actually ArrayType(DoubleType,true).' 

मेरे features स्तंभ चल बिन्दु मूल्यों की एक सरणी में शामिल है। ऐसा लगता है कि मुझे उन्हें किसी प्रकार के वेक्टर में बदलने की ज़रूरत है (यह स्पैस नहीं है, इसलिए एक डेंस वेक्टर?)। क्या डेटाफ्रेम पर सीधे ऐसा करने का कोई तरीका है या क्या मुझे आरडीडी में कनवर्ट करने की ज़रूरत है?

उत्तर

12

आप यूडीएफ का उपयोग कर सकते हैं:

udf(lambda vs: Vectors.dense(vs), VectorUDT()) 

स्पार्क में < 2.0 आयात:

from pyspark.mllib.linalg import Vectors, VectorUDT 

स्पार्क में 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)) 
)) 
संबंधित मुद्दे