问题描述
我正在尝试通过将其加载到AWS Lambda函数中的pandas数据帧中,从azure存储blob转换大型gzip csv文件(> 3 Gigs)。
具有16个演出的本地计算机能够处理我的文件,但在AWS Lambda中执行时会给出内存错误“ errorType”:“ MemoryError” ,因为lambda的最大内存为3 Gb。 / p>
是否可以通过aws lambda读取和处理内存中的大数据。只需提一下,我也尝试了流方式,但是没有运气。
下面是我的示例代码-
from azure.storage.blob import *
import pandas as pd
import gzip
blob = BlobClient(account_url="https://" + SOURCE_ACCOUNT + ".blob.core.windows.net",container_name=SOURCE_CONTAINER,blob_name=blob_name,credential=SOURCE_ACCT_KEY)
data = blob.download_blob()
data = data.readall()
unzipped_bytes = gzip.decompress(data)
unzipped_str = unzipped_bytes.decode("utf-8")
df = pd.read_csv(StringIO(unzipped_str),usecols=req_columns,low_memory=False)
解决方法
尝试使用块并一次以n行读取数据:
for chunk in pd.read_csv("large.csv",chunksize=10_000):
print(chunk)
尽管我不确定压缩文件。在最坏的情况下,您可以解压缩数据,然后按块读取。