簡體   English   中英

如何在PySpark DataFrame中將ArrayType轉換為DenseVector?

[英]How to convert ArrayType to DenseVector in PySpark DataFrame?

我在嘗試構建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?

您可以使用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))
))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM