137 votes

Convertir étincelle DataFrame colonne de liste python

Je travaille sur un dataframe avec deux colonne, mvv et à compter.

+---+-----+
|mvv|count|
+---+-----+
| 1 |  5  |
| 2 |  9  |
| 3 |  3  |
| 4 |  1  |

j'aimerais obtenir les deux liste contenant mvv valeurs et la valeur du nombre. Quelque chose comme

mvv = [1,2,3,4]
count = [5,9,3,1]

Donc, j'ai essayé le code suivant: La première ligne doit retourner une liste python de ligne. Je voulais voir la première valeur:

mvv_list = mvv_count_df.select('mvv').collect()
firstvalue = mvv_list[0].getInt(0)

Mais j'ai un message d'erreur avec la deuxième ligne:

AttributeError: getInt

189voto

Thiago Baldim Points 3226

Voir, pourquoi cette manière de faire ne fonctionne pas. Tout d'abord, vous essayez d'avoir en entier à partir d'un Type de Ligne, la sortie de votre recueillir est comme ceci:

>>> mvv_list = mvv_count_df.select('mvv').collect()
>>> mvv_list[0]
Out: Row(mvv=1)

Si vous prenez quelque chose comme ceci:

>>> firstvalue = mvv_list[0].mvv
Out: 1

Vous obtiendrez la mvv valeur. Si vous voulez toutes les informations de la matrice, vous pouvez prendre quelque chose comme ceci:

>>> mvv_array = [int(i.mvv) for i in mvv_list.collect()]
>>> mvv_array
Out: [1,2,3,4]

Mais si vous n'cette ligne ci-dessous, vous bénéficiez de:

>>> count_array = [int(i.count) for i in mvv_list.collect()]
Out: TypeError: int() argument must be a string or a number, not 'builtin_function_or_method'

Cela se produit en raison de la méthode de comptage est une méthode intégrée. Et la colonne a le même nom que le comte. Un travail autour de ce faire est de changer le nom de la colonne du comte de _count:

>>> mvv_list = mvv_list.selectExpr("mvv as mvv", "count as _count")

Et puis essayer de faire ceci:

>>> mvv_array = [int(i.mvv) for i in mvv_list.collect()]
>>> mvv_count = [int(i._count) for i in mvv_list.collect()]

Et enfin, il travail!

J'espère que cela va vous aider.

142voto

Neo Points 1089

Suite à un liner donne la liste que vous souhaitez.

mvv = mvv_count_df.select("mvv").rdd.flatMap(lambda x: x).collect()

30voto

Vampire Coder Points 528

Cela vous donnera tous les éléments d'une liste.

mvv_list = list(
    mvv_count_df.select('mvv').toPandas()['mvv']
)

21voto

Itachi Points 403

Le code suivant va vous aider à

mvv_count_df.select('mvv').rdd.map(lambda row : row[0]).collect()

6voto

anirban sen Points 11

AttributeError: 'liste' de l'objet n'a pas d'attribut "collect"

Si vous obtenez cette erreur d'utiliser le code ci-dessous

mvv_list = mvv_count_df.select('mvv').collect()

mvv_array = [int(j'.mvv) for i in mvv_list]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X