Tôi có tệp CSV 3 GB mà tôi cố gắng đọc bằng python, tôi cần cột trung bình khôn ngoan.Python hết bộ nhớ trên tệp CSV lớn (numpy)
from numpy import *
def data():
return genfromtxt('All.csv',delimiter=',')
data = data() # This is where it fails already.
med = zeros(len(data[0]))
data = data.T
for i in xrange(len(data)):
m = median(data[i])
med[i] = 1.0/float(m)
print med
Các lỗi mà tôi nhận được là:
Python(1545) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "Normalize.py", line 40, in <module>
data = data()
File "Normalize.py", line 39, in data
return genfromtxt('All.csv',delimiter=',')
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-
packages/numpy/lib/npyio.py", line 1495, in genfromtxt
for (i, line) in enumerate(itertools.chain([first_line, ], fhd)):
MemoryError
Tôi nghĩ rằng nó chỉ là một trong số lỗi bộ nhớ. Tôi đang chạy một MacOSX 64bit với 4GB ram và cả numpy và Python được biên dịch trong chế độ 64bit.
Làm cách nào để khắc phục sự cố này? Tôi có nên thử một cách tiếp cận phân tán, chỉ để quản lý bộ nhớ?
Cảm ơn
EDIT: Cũng thử với điều này, nhưng không may mắn ...
genfromtxt('All.csv',delimiter=',', dtype=float16)
Sử dụng [pandas.read_csv] (http://wesmckinney.com/blog/?p=543) nó nhanh hơn đáng kể. –