Comment diviser les données vectorielles en colonnes dans PySpark ?

Linda Hamilton
Libérer: 2024-10-31 17:22:02
original
842 Les gens l'ont consulté

How to Split Vector Data into Columns in PySpark?

Diviser les données vectorielles en colonnes dans PySpark

Le problème de la conversion d'une colonne "vecteur" avec des données vectorielles en plusieurs colonnes, une pour chacune dimension des vecteurs, apparaît fréquemment dans l’analyse des données et l’apprentissage automatique. Cette question aborde ce problème dans le contexte d'Apache PySpark.

Extraction à l'aide de Spark >= 3.0.0

Pour les versions Spark 3.0.0 et supérieures, une version simplifiée est disponible en utilisant la fonction vector_to_array :

<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 créera une nouvelle colonne xs avec un tableau contenant les éléments du vecteur.

Extraction à l'aide de Spark < 3.0.0

Pour les versions Spark antérieures à 3.0.0, les méthodes suivantes peuvent être utilisées :

Conversion en RDD et extraction :

Convertissez le DataFrame en RDD et effectuez une extraction élément par élément des valeurs vectorielles :

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

df.rdd.map(extract).toDF(["word"])</code>
Copier après la connexion

Approche UDF :

Définissez une fonction définie par l'utilisateur (UDF ) pour convertir la colonne vectorielle en tableau :

<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
 .withColumn("xs", to_array(col("vector")))
 .select(["word"] + [col("xs")[i] for i in range(3)]))</code>
Copier après la connexion

Ces deux approches extrairont les éléments vectoriels dans des colonnes séparées, permettant une analyse et une utilisation plus approfondies.

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!

source:php.cn
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