Maison > Article > développement back-end > Comment diviser les données vectorielles en colonnes dans 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!