La suppression doubles colonnes après une DF rejoindre Spark
Lorsque vous vous joignez à deux DFs avec les mêmes noms de colonnes:
df = df1.join(df2, df1['id'] == df2['id'])
Rejoindre fonctionne très bien, mais vous ne pouvez pas appeler le id
colonne, car il est ambigu et vous obtiendrez l'exception suivante:
pyspark.sql.utils.AnalysisException: "Reference 'id' is ambiguous, could be: id#5691, id#5918.;"
Ce fait id
pas utilisable... plus
La fonction suivante permet de résoudre le problème:
def join(df1, df2, cond, how='left'):
df = df1.join(df2, cond, how=how)
repeated_columns = [c for c in df1.columns if c in df2.columns]
for col in repeated_columns:
df = df.drop(df2[col])
return df
Ce que je n'aime pas, c'est que je dois effectuer une itération sur les noms de colonnes et les supprimer pourquoi par un. Cela ressemble vraiment maladroit...
Connaissez-vous une autre solution qui va le rejoindre et supprimer les doublons de manière plus élégante ou supprimer plusieurs colonnes sans itération sur chacun d'eux?
marque la réponse sera aider les autres.
OriginalL'auteur thecheech | 2017-10-26
Vous devez vous connecter pour publier un commentaire.
Si les colonnes de jointure des deux trames de données ayant le même nom et vous avez seulement besoin d'equi rejoindre, vous pouvez spécifier les colonnes de jointure comme une liste, auquel cas le résultat ne garder qu'une seule des colonnes de jointure:
Sinon, vous devez donner à la jointure des trames de données alias et reportez-vous à la copie de colonnes par le alias plus tard:
OriginalL'auteur Psidom
En supposant que 'a' est un dataframe avec la colonne 'id' et 'b' est un autre dataframe avec la colonne 'id'
- Je utiliser les deux méthodes suivantes pour supprimer les doublons:
Méthode 1: en Utilisant la Chaîne de l'Expression de la Jointure par opposition à l'expression booléenne. Cette supprimer automatiquement une double colonne pour vous
Méthode 2: Renommer la colonne avant de le rejoindre et de le déposer après
OriginalL'auteur Heapify
Le code ci-dessous fonctionne avec Spark 1.6.0 et au-dessus.
En supposant que -dans cet exemple - que le nom du partage de la colonne est la même:
.join
permettra d'éviter la duplication du partage de la colonne.Supposons que vous souhaitez supprimer la colonne
Num
dans cet exemple, vous pouvez simplement utiliser.drop('colname')
OriginalL'auteur hussam