Écraser les partitions spécifiques dans la méthode d'écriture spark dataframe
je veux écraser des partitions spécifiques au lieu de tout dans spark. Je suis en train d'essayer la commande suivante:
df.write.orc('maprfs:///hdfs-base-path','overwrite',partitionBy='col4')
où df est dataframe ayant les données incrémentielles à écraser.
hdfs-base-chemin d'accès contient les données de base.
quand j'essaie la commande ci-dessus, elle supprime toutes les partitions, et insère celles présentes dans df au chemin HDFS.
ce que mon exigence est d'écraser seulement les partitions présentes dans df à la spécifiée hdfs chemin. Quelqu'un peut-il m'aider à cela?
8 réponses
C'est un problème commun. La seule solution avec Spark jusqu'à 2.0 est d'écrire directement dans le répertoire de partition, par exemple,
df.write.mode(SaveMode.Overwrite).save("/root/path/to/data/partition_col=value")
si vous utilisez Spark avant 2.0, vous devez empêcher Spark d'émettre des fichiers de métadonnées (parce qu'ils vont casser la découverte automatique de la partition) en utilisant:
sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
Si vous utilisez Étincelle avant 1.6.2, vous devrez également supprimer le _SUCCESS
fichier /root/path/to/data/partition_col=value
ou sa présence cassera la découverte automatique des partitions. (Je il est fortement recommandé d'utiliser 1.6.2 ou plus.)
Vous pouvez obtenir un peu plus de détails sur la façon de gérer les grandes tables partitionnées de mon Étincelle Sommet de parler sur Boulots Pare-Balles.
enfin! C'est maintenant une fonctionnalité dans l'Étincelle 2.3.0: https://issues.apache.org/jira/browse/SPARK-20236
Pour l'utiliser, vous devez définir l'