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?

Je ne suis pas à mon allumage de la console, mais pouvez-vous utiliser le .méthode toArray ()? Df.select('rand_dbl').toArray(). Ni votre numéro ou rand_int suggèrent qu'un groupby a tous les groupes de travail de nécessiter un groupby.
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