我正在尝试使用pandas&读取s3中的1.5 GB文件。 boto3 今天,我不得不将36 GB深的文件转换为宽文件(1.5 GB)。 我将1.5 GB文件写入本地,并使用pandas.read_csv()检查是否一切正常。它读起来没有任何问题。
但是在使用boto3读取时复制到s3后,由于奇怪的内存错误导致代码错误。该代码通常适用于300到1 GB的文件大小。
我目前无法确定错误的来源。我尝试将文件再次复制到s3&阅读时仍然会出现相同的内存错误。
从s3读取的代码:
input_file_obj= s3.get_object(Bucket=bucket, Key=file)
input_file_content= input_file_obj["Body"].read()
df=pd.read_csv(io.BytesIO(input_file_content), index_col=None, delimiter=delim,header=hdr,low_memory=False)
我认为ram不是问题,因为我在使用的EC2机器上有32 GB的RAM。我正在研究的机器是Unix。
示例错误:
*** Error in `python': free(): invalid pointer: 0x00007fd70340c3e4 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7c503)[0x7fd71d737503]
/home/user/anaconda3/lib/python3.6/site-packages/pandas/_libs/parsers.cpython-36m-x86_64-linux-gnu.so(parser_cleanup+0x1a)[0x7fd70340467a]
link完成错误日志
答案 0 :(得分:1)
您在EC2 / S3上看到此错误但不在本地看到此错误的原因可能是由于您正在使用的VM实例上的C环境。您的本地计算机可能只具有与VM上捆绑的设备更兼容的C设置。
要解决此问题,请考虑在engine='python'
中设置low_memory=True
或read_csv()
。 engine
中的low_memory
和read_csv()
参数似乎都参与了基础C实现。这个discussion发现了类似的错误,并发现这是个问题。
公平的警告:我对Pandas不太熟悉,自信地说出它与C的关系如何。根据OP评论,这些参数值调整似乎解决了这个问题,但我欢迎任何有更多经验的人来这里讨论。