Comment écrire dans un fichier CSV dans Spark
J'essaie de trouver un moyen efficace de sauvegarder le résultat de mon Étincelle d'Emploi en tant que fichier csv. Je suis à l'aide d'Étincelle avec Hadoop et jusqu'à présent, tous mes fichiers sont enregistrés comme part-00000
.
Des idées comment faire pour que mon étincelle enregistrement dans un fichier avec un nom de fichier spécifié?
- Double Possible de Comment écrire le résultant CA dans un fichier csv dans Spark python
- étant donné les circonstances, que la question d'un éventuel doublon de celui-ci :]
- Le contenu des sujets a plus, que le calendrier, mais c'est très bien. Vous avez fait une grande question, c'est pourquoi je upvoted trop! 🙂
- Double Possible de Écriture d'un seul fichier CSV à l'aide de l'étincelle-csv
Vous devez vous connecter pour publier un commentaire.
Depuis Étincelle utilise Hadoop Système de Fichiers de l'API pour écrire des données dans les fichiers, c'est en quelque sorte inévitable. Si vous ne
Il sera enregistré en tant que "
foo/part-XXXXX
" avec un* fichier de chaque partition de la RDD vous essayez d'enregistrer. La raison pour chaque partition dans la RDD est écrit dans un fichier distinct est pour la tolérance de panne. Si la tâche de l'écriture de la 3ème partition (c'est à dire àpart-00002
) échoue, Étincelle, il suffit de ré-exécuter la tâche et de remplacer la partie écrite/endommagépart-00002
, n'ayant pas d'effet sur d'autres parties. Si ils ont tous écrit pour le même fichier, il est beaucoup plus difficile de récupérer une seule tâche pour les échecs.La
part-XXXXX
fichiers sont généralement pas un problème si vous allez consommer de nouveau dans Spark /Hadoop-fondé des cadres, parce que depuis qu'ils utilisent tous HDFS API, si vous leur demandez de lire "foo", ils seront tous de lire tous lespart-XXXXX
fichiers à l'intérieur de foo ainsi.hdfs dfs -getmerge <src-directory> <dst-file>
repartition(1)
. Qui devrait seulement être fait avec les données de petite taille, par exemple, lorsque vous souhaitez main sur un CSV à un analyste de regarder dans Excel.coalesce(1)
Je vous suggère de le faire de cette manière (exemple Java):
Il est un autre approche basée sur Hadoop système de fichiers ops.
L'extension de Tathagata Das réponse à Spark 2.x et Scala 2.11
Utilisant Spark SQL, nous pouvons le faire en un paquebot
Ensuite, vous pouvez aller tête et de procéder à adoalonso's réponse.
J'ai une idée, mais n'est pas prêt extrait de code. En interne (comme le nom l'indique) Étincelle utilise Hadoop format de sortie. (ainsi que
InputFormat
lors de la lecture de HDFS).Dans hadoop est
FileOutputFormat
il est membre protégésetOutputFormat
, que vous pouvez appeler à partir de la classe héritée de définir un ensemble de nom de base.Ce n'est pas vraiment une solution propre, mais à l'intérieur d'un
foreachRDD
() vous pouvez faire ce que vous voulez, aussi créer un nouveau fichier.Dans ma solution c'est ce que je fais: je enregistrer la sortie sur HDFS (pour la tolérance aux pannes raisons), et à l'intérieur d'un
foreachRDD
j'ai aussi créer un fichier TSV avec des statistiques dans un dossier local.Je pense que vous pourriez probablement faire la même chose si c'est ce que vous avez besoin.
http://spark.apache.org/docs/0.9.1/streaming-programming-guide.html#output-operations