为什么Dask to_csv在零件中保存文件



上下文序言:

我有一个示例csv文件,它的列比行多(大约300比190(,在处理整个8000万条记录之前,我正在尝试了解它是如何工作的。我正在做一个谷歌colab笔记本。

我想做的事情:

读取CSV文件,对所有列执行value_counts((并保存结果

这是代码,我保持原样:

import dask.dataframe as dd
import pandas as pd
# Here we're reading the csv
dfd = dd.read_csv(
'drive/MyDrive/csvs/sample.csv', 
delimiter=';',
# Down below we specify the types of the first columns
dtype = {'ID': object, 'BSID': 'UInt32', 'CAM': 'UInt32',
'AGZ': 'UInt32', 'Zen': 'UInt16', 'taw': 'UInt16'
},
blocksize=64000000 # = 64 Mb chunks
)
# Here we convert the rest of the ~300 columns to UInt8
cols=[i for i in dfd.columns if i not in ['ID', 'BSID', 'CAM',
'AGZ', 'Zen', 'taw']]
for col in cols:
dfd[col]=dfd[col].astype('UInt8')
# value_counts
for col in dfd.columns:
result = dfd[col].value_counts()
result.to_csv('drive/MyDrive/csvs/Value_counts-' + col + '.csv')

出了什么问题:

执行代码时,结果将作为名为0.part的文件存储在按照Value_counts-' + col + '.csv模式命名的文件夹中。我希望它被保存为csvs文件夹中的Value_counts-' + col + '.csv文件。

为什么会发生这种情况?

附加问题:

我能以更好的方式为所有列运行value_counts((吗?

请参阅文档

single_file:bool,默认错误

是否将所有内容保存到单个CSV文件中。单下文件模式,每个分区都附加在指定CSV的末尾文件

在您的情况下,每个输出只有一个分区(part.0(,但Dask不知道您不需要从多个块进行并行写入,所以您需要帮助它。

有更好的方法吗?好吧,听起来你的列比分区多得多,所以你可以做dfd.map_partitions(pd.DataFrame.value_counts)sum的部分。

相关内容

  • 没有找到相关文章

最新更新