我有一个适合 RAM 的数据集,但当我运行某些方法(例如df.unique(). 我的笔记本电脑有 16GB 内存。我正在使用 14GB RAM 运行 WSL。我使用的是 Polars 版本 0.18.4。运行df.estimated_size()表明,当我读入数据集时,我的数据集约为 6GB。我的数据的架构是
index: Int64
first_name: Utf8
last_name: Utf8
race: Utf8
pct_1: Float64
pct_2: Float64
pct_3: Float64
pct_4: Float64
Run Code Online (Sandbox Code Playgroud)
index: Int64
first_name: Utf8
last_name: Utf8
race: Utf8
pct_1: Float64
pct_2: Float64
pct_3: Float64
pct_4: Float64
Run Code Online (Sandbox Code Playgroud)
但是,我无法在不收到 SIGKILL 信号的情况下执行诸如.unique()、.drop_nulls()等任务。我正在使用 LazyFrames。
例如,
size = pl.read_parquet("data.parquet").estimated_size()
df = pl.scan_parquet("data.parquet") # use LazyFrames
Run Code Online (Sandbox Code Playgroud)
导致内存不足错误。我可以通过编写自定义函数来回避这个问题。
df = df.drop_nulls().collect(streaming=True)
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么后者有效而前者无效,因为数据集的最大版本(当我最初读入它时)适合 RAM。
不幸的是,我无法想出类似的技巧来做同样的事情.unique()。我可以做些什么来.unique()减少内存占用吗?我努力了:
def …Run Code Online (Sandbox Code Playgroud)