J'ai accès à un système de fichiers hdfs et je peux voir les fichiers parquet avec
hadoop fs -ls /user/foo
Comment puis-je copier ces fichiers parquet sur mon système local et les convertir en csv afin de pouvoir les utiliser? Les fichiers doivent être de simples fichiers texte avec un certain nombre de champs par ligne.
Essayer
df = spark.read.parquet("/path/to/infile.parquet")
df.write.csv("/path/to/outfile.csv")
Documentation API pertinente:
Tous les deux /path/to/infile.parquet
et /path/to/outfile.csv
devrait être des emplacements sur le système de fichiers hdfs. Vous pouvez spécifier hdfs://...
explicitement ou vous pouvez l'omettre car il s'agit généralement du schéma par défaut.
Vous devez éviter d'utiliser file://...
, car un fichier local signifie un fichier différent pour chaque machine du cluster. Exportez plutôt vers HDFS puis transférez les résultats sur votre disque local à l'aide de la ligne de commande:
hdfs dfs -get /path/to/outfile.csv /path/to/localfile.csv
Ou affichez-le directement depuis HDFS:
hdfs dfs -cat /path/to/outfile.csv
Extrait pour une forme plus dynamique, car vous ne savez peut-être pas exactement quel est le nom de votre fichier parquet, sera:
for filename in glob.glob("[location_of_parquet_file]/*.snappy.parquet"):
print filename
df = sqlContext.read.parquet(filename)
df.write.csv("[destination]")
print "csv generated"
Si une table est définie sur ces fichiers parquet dans Hive (ou si vous définissez une telle table vous-même), vous pouvez exécuter une requête Hive à ce sujet et enregistrer les résultats dans un fichier CSV. Essayez quelque chose comme:
insérer écraser le répertoire local dirname champs délimités au format de ligne se terminant par ',' sélectionnez * dans nom de la table;
Substitut dirname
et tablename
avec des valeurs réelles. N'oubliez pas que tout contenu existant dans le répertoire spécifié est supprimé. Voir Écriture de données dans le système de fichiers à partir de requêtes pour plus de détails.