Maison  >  Article  >  développement back-end  >  Comment diviser les données vectorielles en colonnes dans PySpark ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 17:22:02786parcourir

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>

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>

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>

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!

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