La transposition de la colonne à la ligne avec Spark
Je suis en train de transposer certaines colonnes de mon tableau à la ligne.
Je suis à l'aide de Python et de la bougie 1.5.0. Voici mon premier tableau:
+-----+-----+-----+-------+
| A |col_1|col_2|col_...|
+-----+-------------------+
| 1 | 0.0| 0.6| ... |
| 2 | 0.6| 0.7| ... |
| 3 | 0.5| 0.9| ... |
| ...| ...| ...| ... |
Je voudrais avoir quelque chose comme ceci:
+-----+--------+-----------+
| A | col_id | col_value |
+-----+--------+-----------+
| 1 | col_1| 0.0|
| 1 | col_2| 0.6|
| ...| ...| ...|
| 2 | col_1| 0.6|
| 2 | col_2| 0.7|
| ...| ...| ...|
| 3 | col_1| 0.5|
| 3 | col_2| 0.9|
| ...| ...| ...|
Ce que quelqu'un sait comment je peux faire? Je vous remercie pour votre aide.
OriginalL'auteur Raouf | 2016-06-16
Vous devez vous connecter pour publier un commentaire.
Il est relativement simple de le faire avec base Spark SQL fonctions.
Python
Scala:
je reçois le message d'erreur
AssertionError: All columns have to be of the same type
OriginalL'auteur zero323
L'Étincelle local de l'algèbre linéaire, les bibliothèques sont actuellement très faible et ils ne comprennent pas les opérations de base comme ci-dessus.
Il y a un JIRA pour la fixation de cette pour Spark 2.1 - mais ce ne sera pas vous aider à aujourd'hui.
Quelque chose à considérer: l'exécution d'une transposition nécessitera probablement complètement brouiller les données.
De maintenant, vous aurez besoin d'écrire RDD code directement. J'ai écrit
transpose
en scala - mais pas en python. Voici lascala
version:De sorte que vous pouvez convertir en python pour votre utilisation. Je n'ai pas de bande passante d'écrire/de test à ce moment-là: laissez-moi savoir si vous avez été incapable de faire la conversion.
Au moins les éléments suivants sont facilement convertis à
python
.zipWithIndex
-->enumerate()
(python équivalent - crédit @zero323)map
-->[someOperation(x) for x in ..]
groupBy
-->itertools.groupBy()
Ici est la mise en œuvre de
flatten
qui n'ont pas d'équivalent python:De sorte que vous devriez être capable de mettre ensemble pour trouver une solution.
Le code ci-dessus a tous les équivalents en python. Si vous connaissez python eh bien, il ne devrait pas être un problème. J'ai montré la
flatten
qui est le seul manquant à partir de python. Laissez-moi savoir 😉zipWithIndex
-->enumerate()
(Python équivalent)?De bons yeux! Je vais upvote votre v belle réponse btw.
Merci. Il est un peu plus détaillé, mais ne déplace pas données.
OriginalL'auteur javadba
Utilisation flatmap. Quelque chose comme ci-dessous devrait fonctionner
OriginalL'auteur David
J'ai pris la Scala réponse @javadba a écrit et créé une version de Python pour la transposition de toutes les colonnes dans une
DataFrame
. Cela pourrait être un peu différent de ce que l'OP a demander...Par exemple:
OriginalL'auteur Tgsmith61591
Une manière très pratique à mettre en œuvre:
OriginalL'auteur Parul Singh
Une façon de résoudre avec
pyspark sql
à l'aide de fonctionscreate_map
etexplode
.OriginalL'auteur Vamsi Prabhala