l'extraction d'un tableau numpy de Pyspark Dataframe
J'ai un dataframe gi_man_df où le groupe peut être n:
+------------------+-----------------+--------+--------------+
| group | number|rand_int| rand_double|
+------------------+-----------------+--------+--------------+
| 'GI_MAN'| 7| 3| 124.2|
| 'GI_MAN'| 7| 10| 121.15|
| 'GI_MAN'| 7| 11| 129.0|
| 'GI_MAN'| 7| 12| 125.0|
| 'GI_MAN'| 7| 13| 125.0|
| 'GI_MAN'| 7| 21| 127.0|
| 'GI_MAN'| 7| 22| 126.0|
+------------------+-----------------+--------+--------------+
et je suis dans l'attente d'une numpy nd_array je.e, gi_man_array:
[[[124.2],[121.15],[129.0],[125.0],[125.0],[127.0],[126.0]]]
où rand_double valeurs après l'application de pivot.
J'ai essayé les 2 méthodes:
PREMIÈRE: je le pivot de la gi_man_df comme suit:
gi_man_pivot = gi_man_df.groupBy("number").pivot('rand_int').sum("rand_double")
et à la sortie j'ai eu est:
Row(number=7, group=u'GI_MAN', 3=124.2, 10=121.15, 11=129.0, 12=125.0, 13=125.0, 21=127.0, 23=126.0)
mais ici, le problème est d'obtenir le résultat souhaité, je ne peux pas le convertir à la matrice puis de les convertir à nouveau à un tableau numpy.
DEUXIÈME:
J'ai créé le vecteur dans le dataframe lui-même à l'aide de:
assembler = VectorAssembler(inputCols=["rand_double"],outputCol="rand_double_vector")
gi_man_vector = assembler.transform(gi_man_df)
gi_man_vector.show(7)
et j'ai obtenu le résultat suivant:
+----------------+-----------------+--------+--------------+--------------+
| group| number|rand_int| rand_double| rand_dbl_Vect|
+----------------+-----------------+--------+--------------+--------------+
| GI_MAN| 7| 3| 124.2| [124.2]|
| GI_MAN| 7| 10| 121.15| [121.15]|
| GI_MAN| 7| 11| 129.0| [129.0]|
| GI_MAN| 7| 12| 125.0| [125.0]|
| GI_MAN| 7| 13| 125.0| [125.0]|
| GI_MAN| 7| 21| 127.0| [127.0]|
| GI_MAN| 7| 22| 126.0| [126.0]|
+----------------+-----------------+--------+--------------+--------------+
mais problème ici c'est que je ne peut pas faire pivoter sur rand_dbl_Vect.
Donc ma question est:
1. Est l'un des 2 approches est la bonne façon d'atteindre le résultat souhaité, si oui, alors comment puis-je aller plus loin pour obtenir le résultat souhaité?
2. Quel autre moyen que je puisse procéder à de sorte que le code est optimal et que la performance est bonne?
mais les groupes peuvent être de n types comme GI_MAN, LI_MAN et les valeurs correspondantes des autres colonnes sont en train de changer en conséquence, j'ai essayé de regrouper par avec pivot et ça fonctionne, pouvez-vous donner des précisions quand vous dites "groupe a tous les groupes de travail de nécessiter un groupe", je n'ai pas tout à fait qu'
Votre numéro de vecteur dans l'exemple est tout 7s. Il n'y a qu'un seul groupe. Alors pourquoi avoir besoin groupby?
a ma réponse pour vous? Si oui, merci de l'approuver.
Les groupes peuvent être de types n, donc j'ai besoin d'un groupe par là
OriginalL'auteur Uday Shankar Singh | 2017-02-08
Vous devez vous connecter pour publier un commentaire.
Ce
produit
toute autre façon de faire de même?
où étiez-vous imaginer la tenue de ce tableau numpy si ce n'est dans la mémoire de votre permis de conduire? Je demande parce que je suis en train de faire une chose semblable et la seule solution que je vois est de lot par le dataframe en morceaux suffisamment petits pour tenir le tableau qui en résulte dans la mémoire.
J'ai le même problème, avez vous trouvé une solution élégante? Je serais heureux d'éviter de réinventer une solution à un problème commun.
OriginalL'auteur data_steve