La conversion d'un vecteur colonne dans un dataframe de nouveau dans une colonne de tableau
J'ai un dataframe avec deux colonnes dont l'une (appelé dist) est dense vecteur. Comment puis-je convertir de nouveau dans une colonne de tableau d'entiers.
+---+-----+
| id| dist|
+---+-----+
|1.0|[2.0]|
|2.0|[4.0]|
|3.0|[6.0]|
|4.0|[8.0]|
+---+-----+
J'ai essayé d'utiliser plusieurs variantes de la suite de l'udf, mais il renvoie une erreur d'incompatibilité de type
val toInt4 = udf[Int, Vector]({ (a) => (a)})
val result = df.withColumn("dist", toDf4(df("dist"))).select("dist")
Qu'est ce qu'un "standard" de la colonne?
Un Tableau par exemple
Donc, apparemment, vous avez envie de combiner toutes les colonnes dans un seul vecteur, à droite?
non, je veux juste convertir la colonne "dist" dans un tableau d'entiers au lieu d'un vecteur
Donc, vous voulez
Un Tableau par exemple
Donc, apparemment, vous avez envie de combiner toutes les colonnes dans un seul vecteur, à droite?
non, je veux juste convertir la colonne "dist" dans un tableau d'entiers au lieu d'un vecteur
Donc, vous voulez
transform
la Vector
dans un Array
, droit?OriginalL'auteur ulrich | 2016-03-07
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est plus facile de le faire en passant par le CA de l'API puis du dos.
Vous bénéficiez de:
OriginalL'auteur Daniel Darabos
J'ai lutté pendant un certain temps pour obtenir la réponse de @ThomasLuechtefeld de travail. Mais a été en cours d'exécution dans cette très frustrant d'erreur:
S'avère que j'ai besoin d'importer des DenseVector de la ml paquet au lieu de la mllib paquet.
Donc cela a fonctionné pour moi:
Oui, la seule différence est que la première ligne. Cela devrait absolument être un commentaire, mais je n'ai pas la réputation. Désolé!
val vectorToColumn = udf{ (x:org.apache.spark.ml.linalg.Vector, index: Int) => x(index) }
qu'il sera en mesure de gérer à la fois Dense et les rares vecteurs.OriginalL'auteur pwb2103
Spark 2.0 vous pouvez faire quelque chose comme:
OriginalL'auteur Thomas Luechtefeld