Python Tué: 9 lors de l'exécution d'un code à l'aide de dictionnaires créés à partir de 2 fichiers csv
Je suis en cours d'exécution d'un code qui a toujours travaillé pour moi. Cette fois, j'ai couru sur 2 .les fichiers csv: "données" (24 MO) et "data1" (475 MO). "données" est composé de 3 colonnes d'environ 680000 éléments, alors que le "data1" a 3 colonnes de 33000000 éléments chacun. Lorsque j'exécute le code, j'ai juste "Tué: 9" après 5 minutes de traitement. Si c'est un problème de mémoire, comment le résoudre?. Toute suggestion est la bienvenue !
C'est le code:
import csv
import numpy as np
from collections import OrderedDict # to save keys order
from numpy import genfromtxt
my_data = genfromtxt('data.csv', dtype='S',
delimiter=',', skip_header=1)
my_data1 = genfromtxt('data1.csv', dtype='S',
delimiter=',', skip_header=1)
d= OrderedDict((rows[2],rows[1]) for rows in my_data)
d1= dict((rows[0],rows[1]) for rows in my_data1)
dset = set(d) # returns keys
d1set = set(d1)
d_match = dset.intersection(d1) # returns matched keys
import sys
sys.stdout = open("rs_pos_ref_alt.csv", "w")
for row in my_data:
if row[2] in d_match:
print [row[1], row[2]]
L'en-tête de "données" est:
dbSNP RS ID Physical Position
0 rs4147951 66943738
1 rs2022235 14326088
2 rs6425720 31709555
3 rs12997193 106584554
4 rs9933410 82323721
5 rs7142489 35532970
L'en-tête de "data1" est:
V2 V4 V5
10468 TC T
10491 CC C
10518 TG T
10532 AG A
10582 TG T
Avez-vous l'exécuter sur votre propre ordinateur ou sur un serveur? Dans le cas où il s'exécute sur un serveur, peut-être, il y a quelques script de contrôle pour les processus qui sont"en liberté", appelant
Salut @tobias_k, je le lance sur mon propre ordinateur portable
Comment avez-vous "get", "Tués: 9"? Dans la sortie standard ou dans un message d'exception?
Salut @D. Everhard, dans la sortie standard: Lucass-MacBook-Air:txt.long lucas$ python match_pos_snp.py Tués: 9
kill -9
sur eux après un certain temps.Salut @tobias_k, je le lance sur mon propre ordinateur portable
Comment avez-vous "get", "Tués: 9"? Dans la sortie standard ou dans un message d'exception?
Salut @D. Everhard, dans la sortie standard: Lucass-MacBook-Air:txt.long lucas$ python match_pos_snp.py Tués: 9
OriginalL'auteur Lucas | 2015-12-14
Vous devez vous connecter pour publier un commentaire.
Les plus susceptibles de noyau, il tue parce que votre script consomme trop de mémoire.
Vous devez effectuer une autre approche et d'essayer de réduire la taille des données en mémoire.
Vous pouvez également trouver cette question utile: Les très grandes matrices à l'aide de Python et NumPy
Dans l'extrait de code suivant, j'ai essayé d'éviter de charger de gros
data1.csv
en mémoire par traitement ligne par ligne. Lui donner un essai.OriginalL'auteur frizzby
Tout d'abord, créez un script python et exécutez le code suivant pour trouver toutes Python processus.
Après avoir exécuter la pâte, de la la sortie, ici, dans la section questions, où je vais voir une notification.
*MODIFIER
Liste de tous les processus et les afficher dans votre réponse, utilisez la commande suivante:
Il est le processus de l'exécution de quelque part -9 tuer, si vous trouvez que vous avez trouvé votre coupable. Travaillez-vous sur n'importe quel autre code récemment? Avez-vous écrire un script quelque part le long de la ligne qui tue un numéro de PID?
Voir modifier et de revenir vers moi.
Post le processus original de votre réponse!
OriginalL'auteur ajsp
La quantité de mémoire de votre ordinateur?
Vous pouvez ajouter quelques optimisations qui permettra d'économiser un peu de mémoire, et si cela ne suffit pas, vous pouvez le compromis de l'UC et de IO pour une meilleure efficacité de mémoire.
Si vous êtes seulement en comparant les clés et ne pas vraiment faire quelque chose avec les valeurs, vous pouvez extraire uniquement les touches:
Alors au lieu de OrderedDict, vous pouvez essayer d'utiliser ensemble ordonné dans cette réponse -- Python a ensemble ordonné ou à l'aide de ordonna-ensemble
module de pypi.
Une fois que vous avez obtenu toutes les intersections clés, vous pouvez écrire un autre programme qui compile les valeurs correspondantes à partir de la source csv.
Si ces optimisations ne sont pas assez, vous pouvez extraire toutes les touches du plus grand nombre, de les enregistrer dans un fichier, puis de charger les touches une par une à partir du fichier de l'aide de générateurs de sorte que le programme vous permettra de ne garder qu'une seule série de touches, plus une clé au lieu de deux ensembles.
Aussi, je te suggère de l'aide python cornichon module pour stocker les résultats intermédiaires.
OriginalL'auteur Alex Volkov