J'ai une trame de données qui ressemble à ci-dessous:

|------------|-----------|---------------|---------------|
|    Name    |   Type    |  Attribute 1  |  Attribute 2  |
|------------|-----------|---------------|---------------|
|   Roger    |     A     |     X         |       Y       |
|------------|-----------|---------------|---------------|
|   Roger    |     A     |     X         |       Y       |
|------------|-----------|---------------|---------------|
|   Roger    |     A     |     X         |       Y       |
|------------|-----------|---------------|---------------|
|   Rafael   |     A     |     G         |       H       |
|------------|-----------|---------------|---------------|
|   Rafael   |     A     |     G         |       H       |
|------------|-----------|---------------|---------------|
|   Rafael   |     B     |     G         |       H       |
|------------|-----------|---------------|---------------|

Je veux partitionner cette trame de données et l'enregistrer sur le disque en fonction du nom et du type

La ligne de code ressemble actuellement à ceci,

df.write.partitionBy("Name", "Type").mode("append").csv("output/", header=True)

La sortie est enregistrée correctement mais a des lignes dupliquées comme mentionné ci-dessous

Dans le dossier

/sortie/Roger/A

|---------------|---------------|
|  Attribute 1  |  Attribute 2  |
|---------------|---------------|
|     X         |       Y       |
|---------------|---------------|
|     X         |       Y       |
|---------------|---------------|
|     X         |       Y       |
|---------------|---------------|

/sortie/Rafael/A

|---------------|---------------|
|  Attribute 1  |  Attribute 2  |
|---------------|---------------|
|     G         |       H       |
|---------------|---------------|
|     G         |       H       |
|---------------|---------------|

/sortie/Rafael/B

|---------------|---------------|
|  Attribute 1  |  Attribute 2  |
|---------------|---------------|
|     G         |       H       |
|---------------|---------------| 

Comme vous pouvez le voir, ce csv contient des doublons. Comment supprimer ces doublons lors de l'utilisation de write.partitionbY ?

0
Roshan Joe Vincent 8 oct. 2020 à 00:40

1 réponse

Meilleure réponse

Utilisez .distinct() avant d'écrire.

df.distinct().write.partitionBy("Name", "Type").mode("append").csv("output/", header=True)
3
Cena 7 oct. 2020 à 22:02