将S3中的一个大文件读取到数据帧中



当我试图将大小超过2GB的文件读取到数据帧时我得到以下错误:溢出错误:有符号整数大于最大

如中所述https://bugs.python.org/issue42853

有解决办法吗?

如bug中所述,使用缓冲区读取文件。请记住,您仍在将数据加载到ram中。因此,您的系统应该仍然有足够大的ram来存储数据。否则会出现内存不足的错误。

现有代码

s3_resource = boto3.resource()
s3_client = boto3.client()
s3_obj = s3_resource.Object(bucket_name, filename).get()
with io.BytesIO(s3_obj["Body"].read()) as file:
file_as_df = pd.read_csv(file, encoding='latin1',sep='t')

修订代码

response = s3_client.get_object(Bucket= bucket_name , Key = filename)
#os.path.join(key, datafile) #ignore this
buf = bytearray(response['ContentLength'])
view = memoryview(buf)
pos = 0
while True:
chunk = response['Body'].read(67108864)
if len(chunk) == 0:
break
view[pos:pos+len(chunk)] = chunk
pos += len(chunk)
file_as_df = pd.read_csv(io.BytesIO(bytes(view)), encoding='latin1',sep='t')

最新更新