gpt4 book ai didi

python - Pandas 数据框太大而无法附加到 dask 数据框?

转载 作者:行者123 更新时间:2023-12-04 03:59:39 24 4
gpt4 key购买 nike

我不确定我在这里遗漏了什么,我认为 dask 可以解决我的内存问题。我有 100 多个以 .pickle 格式保存的 Pandas 数据帧。我想让它们都在同一个数据框中,但一直遇到内存问题。我已经在 jupyter 中增加了内存缓冲区。似乎我在创建 dask 数据框时可能遗漏了一些东西,因为它似乎在完全填满我的 RAM 后使我的笔记本崩溃(也许)。有什么指点吗?

下面是我使用的基本流程:

import pandas as pd
import dask.dataframe as dd

ddf = dd.from_pandas(pd.read_pickle('first.pickle'),npartitions = 8)
for pickle_file in all_pickle_files:
ddf = ddf.append(pd.read_pickle(pickle_file))
ddf.to_parquet('alldata.parquet', engine='pyarrow')
  • 我已经尝试了各种npartitions,但没有任何一个能让代码完成运行。
  • 总而言之,我想合并大约 30GB 的 pickled 数据帧
  • 也许这不是正确的库,但文档建议 dask 应该能够处理这个问题

最佳答案

您是否考虑过先将 pickle 文件转换为 parquet 然后加载到 dask?我假设您的所有数据都在一个名为 raw 的文件夹中,并且您想移动到 processed

import pandas as pd
import dask.dataframe as dd
import os

def convert_to_parquet(fn, fldr_in, fldr_out):
fn_out = fn.replace(fldr_in, fldr_out)\
.replace(".pickle", ".parquet")
df = pd.read_pickle(fn)
# eventually change dtypes

df.to_parquet(fn_out, index=False)

fldr_in = 'data'
fldr_out = 'processed'
os.makedirs(fldr_out, exist_ok=True)

# you could use glob if you prefer
fns = os.listdir(fldr_in)
fns = [os.path.join(fldr_in, fn) for fn in fns]

如果您知道只有一个文件适合内存,您应该使用循环

for fn in fns:
convert_to_parquet(fn, fldr_in, fldr_out)

如果您知道更多文件适合内存,您可以使用delayed

from dask import delayed, compute

# this is lazy
out = [delayed(fun)(fn) for fn in fns]
# now you are actually converting
out = compute(out)

现在您可以使用 dask 进行分析。

关于python - Pandas 数据框太大而无法附加到 dask 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63252135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com