IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Noyau qui plante / Big Database


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Débutant Data Analyst
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Débutant Data Analyst

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut Noyau qui plante / Big Database
    Bonjour à tous !
    Alors voici mon problème, Je souhaite lire une base de données en plusieurs tronçons puis les assemblés en un DataFrame.
    J'utilise pour cela read_csv() ainsi que chunksize= 1000000 (Je ne sais pas combien de lignes contient la base mais c'est très gros).

    J'utilise ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chunk_list =[]
    for chunk in df:
        chunk_list.append(chunk)
    df_concat=pd.concat(chunk_list)
    Mais à ce moment là, la ram augmente jusqu'à son maximum et ensuite mon notebook m'indique que le noyau a planté.
    Comment puis-je faire pour lire cette base de données en plusieurs parties et ensuite la rassembler en un en optimisant la ressource mémoire.
    Merci beaucoup

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Si tu gardes ces informations dans la pile, c'est le risque, mais pourquoi ne pas faire le traitement de ces informations à chaque lecture de ligne par exemple ?

    Mais je suis quand même surpris que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df = pd.read_csv("monfichier.csv")
    ne suffise pas.

  3. #3
    Membre averti
    Homme Profil pro
    Débutant Data Analyst
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Débutant Data Analyst

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Je n'ai pas tout à fait compris où tu voulais en venir.


    J'ai accès à des serveurs de 8,16 et 32go de RAM avec processeur 16 cores. Peut être qu'en choisissant un serveur avec plus de ram cela pourrait fonctionner mais j'en doute.
    Ca me bloque dès la lecture de la base pas très pratique ahah*


    Sinon dans ces bases je n'ai besoin que de certaines colonnes est-il possible de ne selectionner que certaines colonnes pendant la lecture ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par antoya Voir le message
    Comment puis-je faire pour lire cette base de données en plusieurs parties et ensuite la rassembler en un en optimisant la ressource mémoire.
    Si c'est trop gros pour rentrer en mémoire (avec un système 64 bits, pas sûr que ce soit la RAM qui limite), lire par chunksize va aider si vous "filtrez" les données qui vous intéressent (et qu'il en reste moins à traiter).

    Sinon, lire par morceau ou tout d'un coup, demandera le même espace mémoire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Débutant Data Analyst
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Débutant Data Analyst

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Merci pour la réponse
    Cependant j'ai besoin de lire toutes les données mais seulement quelques colonnes parmi celles-ci.
    Est-il possible de ne lire que quelques colonnes mais toutes les lignes dans read_csv() (Je n'ai jamais vu cela mais je préfère demander)

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Ce n'est sans doute pas dans un fichier csv que ces données auraient leur place, mais dans une BDD type PostgreSQL par exemple.
    Avec des requêtes SQL tu aurais eu les colonnes facilement et surtout rapidement.

  7. #7
    Membre averti
    Homme Profil pro
    Débutant Data Analyst
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Débutant Data Analyst

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Ce n'est sans doute pas dans un fichier csv que ces données auraient leur place, mais dans une BDD type PostgreSQL par exemple.
    Avec des requêtes SQL tu aurais eu les colonnes facilement et surtout rapidement.
    C'est sûr !

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Citation Envoyé par antoya Voir le message
    Est-il possible de ne lire que quelques colonnes mais toutes les lignes dans read_csv() (Je n'ai jamais vu cela mais je préfère demander)
    C'est tout l'intérêt de lire par chunk: garder les données qui vous intéressent (ou éliminer celles que vous ne voulez pas). Pour des exemples, cherchez un peu sur Internet.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre averti
    Homme Profil pro
    Débutant Data Analyst
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Débutant Data Analyst

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est tout l'intérêt de lire par chunk: garder les données qui vous intéressent (ou éliminer celles que vous ne voulez pas). Pour des exemples, cherchez un peu sur Internet.

    - W
    Justement dans le code en haut j'essaye de lire chaque chunk créé puis de l'insérer dans un liste pour le transformer en DataFrame.
    Les exemples d'internet utilisent des chunks de quelques milliers de lignes mais pratiquement jamais à plus d'un million et sur une petite base aucun problème.
    Est-ce qu'il y a moyen d'optimiser ce code ou utiliser une boucle performante qui puisse lire chaque chunk et l'intégrer dans un seul ou plusieurs DataFrames.

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par antoya Voir le message
    Justement dans le code en haut j'essaye de lire chaque chunk créé puis de l'insérer dans un liste pour le transformer en DataFrame.
    Je vous ai déjà répondu: si vous ne filtrez rien, vous aurez la même chose à stocker qu'en lisant tout d'un coup...

    Et stocker dans plusieurs dataframes ne consommera pas moins de mémoire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. PB d'update qui plante aléatoirement sans renvoyer d'erreur
    Par plc402 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2005, 09h10
  2. [Novice] Problème avec Eclipse 3.0.x qui plante
    Par esolarc dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2005, 13h22
  3. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50
  4. Pc qui plante
    Par tooms2028 dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 19/03/2005, 17h32
  5. [JTextArea] redessin qui plante
    Par phil_ma dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2005, 05h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo