使用pandas&;从s3读取csv文件时出现内存错误;博托。“python';中的错误:free():无效指针:

使用pandas&;从s3读取csv文件时出现内存错误;博托。“python';中的错误:free():无效指针:,python,pandas,csv,amazon-s3,boto3,Python,Pandas,Csv,Amazon S3,Boto3,我正在尝试使用pandas&boto3从s3读取1.5gb的文件 今天,我必须将一个36 GB深的文件转换成一个宽文件(1.5 GB)。 我将1.5 GB文件写入本地,并使用pandas.read_csv()检查是否一切正常。它读起来没有任何问题 但是在使用boto3读取时复制到s3之后,由于一个奇怪的内存错误,代码错误被清除。该代码通常适用于300到1GB的文件大小 我目前无法确定错误的确切来源。我再次尝试将文件复制到s3&在读取时仍然出现相同的内存错误 从s3读取的代码: input_fil

我正在尝试使用pandas&boto3从s3读取1.5gb的文件 今天,我必须将一个36 GB深的文件转换成一个宽文件(1.5 GB)。 我将1.5 GB文件写入本地,并使用pandas.read_csv()检查是否一切正常。它读起来没有任何问题

但是在使用boto3读取时复制到s3之后,由于一个奇怪的内存错误,代码错误被清除。该代码通常适用于300到1GB的文件大小

我目前无法确定错误的确切来源。我再次尝试将文件复制到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]

要完成错误日志,您在EC2/S3上看到此错误而不是在本地看到此错误的原因可能是由于您正在使用的VM实例上的C环境。您的本地机器可能只是有一个更兼容的C设置比任何捆绑在您的虚拟机

< P> >修复此问题,考虑在代码< > Read Oracle()>代码>中设置<代码>引擎=“Python”< /> >或<代码>
read\u csv()
中的
引擎
内存不足
参数似乎都参与了底层的C实现。这发现了一个类似的错误,并发现这就是问题所在


公平警告:我对熊猫还不够熟悉,不能自信地谈论它是如何在引擎盖下使用C的。根据OP的评论,这些参数值调整似乎解决了问题,但我欢迎有更多经验的人加入进来

如果在
read\u csv
中设置
engine='python'
low\u memory=True
,是否会出现相同的错误?有一点提示这可能与C不兼容有关,如果您希望EC2图像按原样工作,可能需要进行某种更新。@andrew_reece我厌倦了给
low\u memory=False
,它工作得很好。我参考了Google和pandas的文档,但并没有对这个参数给出太多的说明。目前正在测试所有使用此功能的模块,以查看是否有任何副作用。如果您不知道,您能详细解释一下这个参数的意义吗?因此,从本地读取和从s3读取之间的差异就是这个参数的值。这就是为什么在您指出后我对它进行了初步测试。对不起,当我指的是本地时,我指的是“从ec2中的存储路径读取”机器本身,而不是使用ec2机器从s3读取。因此
内存不足=False
导致了s3的问题,因为从本地存储读取时默认为true。哦,我明白了。这似乎与PythonC解析器读取S3 bucket的方式有关。Pandas在S3中的做法与本地文件的读入方式略有不同,请参见讨论。由于该PR进入,S3的
read_csv()
打开了一条通向S3的管道,但不会一次下载全部内容。这可能是底层C配置遇到问题的地方,这取决于从流读取时如何分配内存。猜对了!根据u共享的链接,我似乎与stream-csv-from-s3没有任何关系。让我试着从本地unix存储中读取低内存=False的数据,看看问题是出在s3还是熊猫本身。