首頁  >  文章  >  後端開發  >  如何在 PySpark 中將 VectorUDT 轉換為列?

如何在 PySpark 中將 VectorUDT 轉換為列?

Patricia Arquette
Patricia Arquette原創
2024-10-31 18:34:01168瀏覽

How do you Convert VectorUDTs into Columns in PySpark?

使用 PySpark 將 VectorUDT 分解為列

在 PySpark 中,您可能需要從儲存為 VectorUDT 的向量列中提取各個維度。為此,您可以根據您的 Spark 版本利用各種方法。

Spark >= 3.0.0

PySpark 3.0.0 帶來了內建功能此任務:

<code class="python">from pyspark.ml.functions import vector_to_array

df.withColumn("xs", vector_to_array("vector")).select(["word"] + [col("xs")[i] for i in range(3)])</code>

這簡潔地將向量轉換為數組並投影所需的列。

Spark

Spark

3.0.0

<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>
3.0.0 之前的Spark 版本需要比較複雜的方法:

RDD 轉換:

<code class="python">from pyspark.sql.functions import udf, col
from pyspark.sql.types import ArrayType, DoubleType

def to_array(col):
    return udf(lambda v: v.toArray().tolist(), ArrayType(DoubleType()))(col)

df.withColumn("xs", to_array(col("vector"))).select(["word"] + [col("xs")[i] for i in range(3)])</code>

UDF 方法:

為了提高效能,請確保將asNon certainistic 與UDF 一起使用(需要Spark 2.3)。

Scala 等效項有關這些方法的Scala 等效項,請參閱「Spark Scala:如何將Dataframe[vector] 轉換為DataFrame[f1:Double , ..., fn: Double)]。

以上是如何在 PySpark 中將 VectorUDT 轉換為列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn