2010-07-19 5 views
3

Pour un grand nombre de fichiers csv énormes (100M lignes +) de différentes sources, j'ai besoin d'un extrait rapide ou une bibliothèque pour auto-deviner le format de date et le convertir en temps décomposé ou unix -timbre. Une fois que vous avez réussi à deviner l'extrait doit être en mesure de vérifier la validité des occurrences suivantes du champ de date, car il est probable que le format de date change dans le fichier.auto-deviner rapidement des chaînes de date

L'ensemble de tests des formats de date doit être variable, mais la compilation d'un arbre de décision optimal ou d'un nombre de formats de date donné est bonne. Je suis arrivé à la conclusion que rien de ce genre n'existe mais que je dois faire une «étude de marché» d'où ma question. Ma première tentative a été d'imiter getdate() pour 23 formats de date différents que j'ai observés jusqu'à présent, et de remplacer les parseurs de nombres par des versions optimisées tenant compte des caractéristiques spécifiques à la date (pas de '4' à '9'). dans les parties de la journée, pas de '3' à '9' dans les parties de la partie mois, etc.)

Quelqu'un at-il rencontré un problème similaire ou même produit un code du genre?

+0

Chaque fichier CSV a-t-il un seul format de date, ou s'agit-il d'un mix? –

+0

Il s'agit généralement d'un seul format par fichier, mais parfois ils changent le format dans le fichier, probablement le résultat d'un échange de fichiers. Très souvent, vous voyez une importation dans une base de données réussie pour les 98 premiers millions de lignes, puis les 40 millions suivantes lignes sont complètement borked. – hroptatyr

+2

Ce sera un peu difficile si vous avez certains formats de date. Est "060804" 8 juin 2004, 6 août 2004 (européen), ou 4 août 2006 (yymmdd)? Vous n'avez peut-être pas de formats comme celui-là, mais si vous le faites, vous devrez choisir et vous pourriez vous trouver mal choisi. S'il s'agit d'une charge permanente, vérifiez si vous pouvez revenir à la source et lui demander de la réparer. Si c'est une chose unique, vous allez devoir vous débrouiller. – mattmc3

Répondre

1

Après deux semaines de navigation excessive de googl^Wweb je suis arrivé à la conclusion que je dois écrire celui-ci moi-même. FTW, mon premier coup d'oeil: http://github.com/hroptatyr/glod

1

J'ai traité des données de capteur horodatées (structurellement CSV) dans plus de cinquante formats à partir de nombreuses sources avec un script Perl. Jamais contraint pour la fonctionnalité, et bien qu'il soit basé sur un script, il était raisonnablement rapide (> 10Klines/sec où la ligne était ~ 60-100chars) J'ai implémenté a) analyse les premières centaines de lignes, rembobine puis exécute .. .pour construire le contexte de la logique de décision. b) émettre des lignes erronées avec le numéro de ligne et le contexte ... donc à la fin de l'exécution pourrait éditer les lignes fautives, puis les mettre à réinsérer lors d'une prochaine exécution, afin qu'il puisse passer "patché" sans erreur, c'est-à-dire que chaque ligne aurait correspondu à un format. c) la différence de temps entre les lignes ... ne permet que l'augmentation de l'horodatage. d) aussi je pourrais reformater d'autres choses comme changer d'unité c'est-à-dire impériale à SI. Bien que depuis le camp C, le simple Perl ne soit pas trop étranger, mais le rende tellement plus facile Note Cette méthode pourrait traiter des problèmes comme 10/04/05 ie JJ/MM/AA ou MM/JJ/AA s'il y avait assez d'informations dans le fichier

+0

Nice, l'esprit de partager votre code? 10k lignes/sec était à peu près ce que j'avais en tête. J'ai démarré un compilateur simple qui prend jusqu'à 64 specs de format et qui émet du code pour effectuer un raffinement incrémental, donc à la fin j'obtiens un masque binaire où un bit défini indique que la spécification de format correspondante a tenu tout le fichier. Pourrait faire avec votre code pour valider le mien. – hroptatyr

+0

Si vous obtenez une page de données de test, je pourrais frapper un démonstrateur, juste pour vous faciliter la courbe d'apprentissage. Vous voudrez peut-être rafraîchir vos expressions régulières, car elles sont utilisées pour sélectionner les données souhaitées. – Roaker

+0

J'ai choisi 6 sources, 10000 lignes chacune. http://qaos.math.tu-berlin.de/~freundt/for_roaker.tar.bz2 – hroptatyr

Questions connexes