使用Polars读取120GB CSV文件时,查询单列致Jupyter内核崩溃如何解决?
解决Polars处理大CSV文件崩溃的问题
针对120GB的CSV文件,你遇到的问题主要是默认的scan_csv配置未做针对性优化,导致不必要的内存占用和解析耗时,以下是具体解决办法:
指定列类型并仅加载目标列
默认情况下scan_csv会扫描整个文件推断所有列的类型,这对超大文件来说非常耗时且占用内存。直接指定目标列的类型,同时通过include_columns限定只加载需要的列,让Polars在读取阶段就只处理目标数据:PATH = "test.csv" # 根据实际数据类型替换,比如pl.Int64、pl.Float64等 df = pl.scan_csv( PATH, dtypes={"First Column": pl.Utf8}, include_columns=["First Column"] ) print(df.collect())启用流式处理避免内存溢出
如果目标列的数据量依然超出内存,在collect时添加streaming=True参数,Polars会分块处理数据,不会一次性将所有数据加载到内存中:print(df.collect(streaming=True))检查并优化CSV格式
若CSV存在格式问题(比如分隔符错误、未转义的特殊字符、不规则换行),会导致Polars解析效率骤降甚至崩溃:- 确认
sep参数设置正确(默认是逗号,如果是制表符用sep="\t") - 若存在少量格式错误,可临时添加
ignore_errors=True跳过错误行,之后再修复源文件
- 确认
避开Jupyter的内存限制
Jupyter内核本身有内存使用限制,超大文件处理建议直接在终端运行Python脚本,避免Jupyter的额外内存开销。
内容的提问来源于stack exchange,提问作者cmdfcs
相关产品推荐
相关产品推荐

