2008-11-26 6 views
1

Mon programme reçoit de gros fichiers CSV et les transforme en fichiers XML. Afin d'avoir une meilleure performance, je voudrais diviser ces fichiers en plus petits segments de (par exemple) 500 lignes. Quelles sont les bibliothèques Java disponibles pour le fractionnement des fichiers texte?Bibliothèques séparées de fichiers texte en Java

Répondre

2

Qu'avez-vous l'intention de faire avec ces données?

S'il s'agit simplement d'enregistrer par traitement d'enregistrement, l'analyse syntaxique orientée événement (SAX ou StaX) sera la solution. Pour un enregistrement par traitement d'enregistrement, une boîte à outils "pipeline" existante peut être applicable.

Vous pouvez pré-traiter votre fichier avec une fonction de séparation comme this one ou this Splitter.java.

4

Je ne comprends pas ce que vous pourriez gagner en divisant le fichier CSV en fichiers plus petits? Avec Java, vous pouvez lire et traiter le fichier au fur et à mesure, vous n'avez pas besoin de le lire tout d'un coup ...

+0

J'utilise une traduction B2B commerciale SW pour transformer le fichier CSV en XML et, ce logiciel ne gère pas très bien les fichiers volumineux ... – Otavio

+0

Quelle est la taille de vos fichiers? J'ai vu des applications Java gérer des fichiers avec des millions de lignes sans perdre de temps. Cela dépend de la façon dont ils sont codés ... –

0

Comment envisagez-vous de distribuer le travail une fois les fichiers divisés?

J'ai fait quelque chose de similaire à cela sur un framework appelé GridGain - c'est un framework de grille de calcul qui vous permet d'exécuter des tâches sur une grille d'ordinateurs. Avec cela en main, vous pouvez ensuite utiliser un fournisseur de cache tel que JBoss Cache pour distribuer le fichier à plusieurs nœuds, spécifier un numéro de ligne de début et de fin et un processus. Cela est décrit dans l'exemple GridGain suivant: http://www.gridgainsystems.com/wiki/display/GG15UG/Affinity+MapReduce+with+JBoss+Cache

Vous pouvez également rechercher quelque chose comme Hadoop et le système de fichiers Hadoop pour déplacer le fichier entre différents nœuds.

Le même concept peut être effectué sur votre machine locale en chargeant le fichier dans un cache, puis en affectant certains "morceaux" du fichier à traiter par des threads séparés. Les trucs de calcul en grille ne sont vraiment que pour de très gros problèmes, ou pour fournir un certain niveau d'évolutivité de façon transparente à votre solution. Vous devrez peut-être surveiller les goulots d'étranglement et les verrous des E/S, mais un simple pool de threads dans lequel vous enverrez des "jobs" après que le fichier a été divisé pourrait fonctionner.

Questions connexes