Maison  >  Article  >  développement back-end  >  Comment convertir des VectorUDT en colonnes dans PySpark ?

Comment convertir des VectorUDT en colonnes dans PySpark ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 18:34:01168parcourir

How do you Convert VectorUDTs into Columns in PySpark?

Démêler les VectorUDT en colonnes à l'aide de PySpark

Dans PySpark, vous devrez peut-être extraire des dimensions individuelles des colonnes vectorielles stockées en tant que VectorUDT. Pour ce faire, vous pouvez exploiter diverses approches en fonction de votre version de Spark.

Spark >= 3.0.0

PySpark 3.0.0 apporte des fonctionnalités intégrées pour cette tâche :

<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>

Cela convertit de manière concise le vecteur en tableau et projette les colonnes souhaitées.

Spark < 3.0.0

Les versions Spark antérieures à 3.0.0 nécessitent des approches plus complexes :

Conversion RDD :

<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>

Méthode UDF :

<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>

Remarque : Pour des performances accrues, assurez-vous que asNondeterministic est utilisé avec l'UDF (nécessite Spark 2.3).

Équivalent Scala

Pour l'équivalent Scala de ces approches, reportez-vous à "Spark Scala : Comment convertir Dataframe[vecteur] en DataFrame[f1:Double, ..., fn: Double)]".

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn