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!