迭代Dask数据帧

2024-10-02 18:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从数百个大型CSV文件的单个列中创建一个KerasTokenizer。Dask似乎是一个很好的工具。我目前的做法最终会导致内存问题:

df = dd.read_csv('data/*.csv', usecol=['MyCol'])

# Process column and get underlying Numpy array.
# This greatly reduces memory consumption, but eventually materializes
# the entire dataset into memory
my_ids = df.MyCol.apply(process_my_col).compute().values

tokenizer = Tokenizer()
tokenizer.fit_on_texts(my_ids)

我怎样才能按零件来做呢?大致如下:

df = pd.read_csv('a-single-file.csv', chunksize=1000)
for chunk in df:
    # Process a chunk at a time

Tags: 文件工具csvidsdfreadmyprocess
2条回答

Dask数据帧在技术上是一组数据帧,称为分区。当您得到底层numpy数组时,您正在破坏分区结构,它将是一个大数组。我建议使用Dask DataFrames的map_partition函数分别在每个分区上应用常规函数

我还建议map_partition当它适合您的问题时。但是,如果您真的只需要顺序访问和类似于read_csv(chunksize=...)的API,那么您可能需要查找partitions属性

for part in df.partitions:
    process(model, part.compute())

相关问题 更多 >