Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teile ich eine Vektorspalte in PySpark in Zeilen auf?

Wie teile ich eine Vektorspalte in PySpark in Zeilen auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 20:10:01406Durchsuche

How to Split a Vector Column into Rows in PySpark?

Aufteilen einer Vektorspalte in Zeilen in PySpark

In PySpark ist das Aufteilen einer Spalte mit Vektorwerten in separate Spalten für jede Dimension üblich Aufgabe. Dieser Artikel führt Sie durch verschiedene Ansätze, um dies zu erreichen:

Spark 3.0.0 und höher

Spark 3.0.0 führte die Funktion „vector_to_array“ ein und vereinfachte diesen Prozess:

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

df = df.withColumn("xs", vector_to_array("vector"))</code>

Sie können dann die gewünschten Spalten auswählen:

<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>

Spark Less Than 3.0.0

Ansatz 1: Konvertieren zu RDD

<code class="python">def extract(row):
    return (row.word, ) + tuple(row.vector.toArray().tolist())

df.rdd.map(extract).toDF(["word"])  # Vector values will be named _2, _3, ...</code>

Ansatz 2: Verwenden einer UDF

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

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

df = df.withColumn("xs", to_array(col("vector")))</code>

Wählen Sie die gewünschten Spalten aus:

<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>

Nach Wenn Sie eine dieser Methoden anwenden, können Sie eine Vektorspalte effektiv in einzelne Spalten aufteilen, was die Arbeit mit und die Analyse Ihrer Daten erleichtert.

Das obige ist der detaillierte Inhalt vonWie teile ich eine Vektorspalte in PySpark in Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn