如何在Python中从URL读取Parquet文件且避免内存过载?
解决方案:远程Parquet文件分批读取(避免内存过载)
针对纽约出租车数据集这类大体积远程Parquet文件的内存过载问题,以下是几种可行的分批读取方案:
方法1:fsspec + PyArrow 按需迭代批次
利用fsspec处理远程HTTP文件访问,让PyArrow可以直接操作远程Parquet文件并逐批读取:
import pyarrow.parquet as pq import fsspec # 初始化HTTP文件系统 fs = fsspec.filesystem("http") # 打开远程Parquet文件流 with fs.open("https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2019-01.parquet", "rb") as f: pq_file = pq.ParquetFile(f) # 按指定批次大小迭代读取,可根据内存调整batch_size for batch in pq_file.iter_batches(batch_size=10000): # 将批次转为DataFrame(按需处理) df_batch = batch.to_pandas() # 这里添加你的批次处理逻辑,比如数据清洗、分析等 # process_batch(df_batch)
方法2:Pandas + fsspec 分批读取
如果习惯使用Pandas,可结合fsspec和read_parquet的chunksize参数实现流式读取:
import pandas as pd import fsspec parquet_url = "https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2019-01.parquet" # 通过fsspec打开远程文件流 with fsspec.open(parquet_url, "rb") as f: # 按每批10000行读取,chunksize可灵活调整 for chunk in pd.read_parquet(f, chunksize=10000): # 处理当前批次数据 # process_chunk(chunk)
关键注意事项
- 批次大小(
batch_size/chunksize)需根据本地内存情况调整:过大仍会导致内存压力,过小则会增加IO请求次数。 - 确保安装必要依赖:执行
pip install pyarrow fsspec pandas完成环境配置。
内容的提问来源于stack exchange,提问作者av abhishiek
相关产品推荐
相关产品推荐

