In PySpark müssen Sie möglicherweise einzelne Dimensionen aus als VectorUDTs gespeicherten Vektorspalten extrahieren. Um dies zu erreichen, können Sie verschiedene Ansätze basierend auf Ihrer Spark-Version nutzen.
Spark >= 3.0.0
PySpark 3.0.0 bietet integrierte Funktionalität für diese Aufgabe:
<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>
Dadurch wird der Vektor präzise in ein Array umgewandelt und die gewünschten Spalten projiziert.
Spark < 3.0.0
Spark-Versionen vor 3.0.0 erfordern komplexere Ansätze:
RDD-Konvertierung:
<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>
UDF-Methode:
<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>
Hinweis: Stellen Sie für eine höhere Leistung sicher, dass asNodeterministic mit der UDF verwendet wird (erfordert Spark 2.3).
Scala-Äquivalent
Das Scala-Äquivalent dieser Ansätze finden Sie unter „Spark Scala: So konvertieren Sie Dataframe[vector] in DataFrame[f1:Double, ..., fn: Double)].“
Das obige ist der detaillierte Inhalt vonWie konvertiert man VectorUDTs in Spalten in PySpark?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!