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

Comment convertir des VectorUDT en colonnes dans PySpark ?

Patricia Arquette
Libérer: 2024-10-31 18:34:01
original
290 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal