csv - 使用 dask 将大于内存的 csv 文件存储到 hdf5 文件

标签 csv hdf5 dask

任务:读取大于内存的csv文件,转换为数组并存储在hdf5中。 一种简单的方法是使用 pandas 分块读取文件 但我想使用 dask,到目前为止没有成功:

最近的尝试:

fname='test.csv'
dset = dd.read_csv(fname, sep=',', skiprows=0, header=None)
dset.to_records().to_hdf5('/tmp/test.h5', '/x')

我怎样才能做到这一点?

实际上,我有一组 csv 文件,表示 3D 数组的 2D 切片 我想组装和存储。关于如何执行后者的建议 也将受到欢迎。

鉴于下面的评论,这是我尝试过的多种变体之一:

dset  = dd.read_csv(fname, sep=',', skiprows=0, header=None, dtype='f8')
shape = (num_csv_records(fname), num_csv_cols(fname))
arr   = da.Array( dset.dask, 'arr12345', (500*10, shape[1]), 'f8', shape)
da.to_hdf5('/tmp/test.h5', '/x', arr)

这会导致错误: key 错误:('arr12345', 77, 0)

最佳答案

您可能想要执行如下操作。问题的真正关键在于,在 read-csv 情况下,dask 在完全加载之前不知道数据的行数,因此生成的数据帧的长度未知(与通常情况一样)对于数据帧)。另一方面,对于大多数操作来说,数组通常需要知道它们的完整形状。对于您的情况,您有额外的信息,因此您可以回避问题。

这是一个示例。

数据

0,1,2
2,3,4

代码

dset = dd.read_csv('data', sep=',', skiprows=0, header=None)
arr = dset.astype('float').to_dask_array(True)
arr.to_hdf5('/test.h5', '/x')

其中“True”表示“求长度”,或者您可以提供自己的一组值。

关于csv - 使用 dask 将大于内存的 csv 文件存储到 hdf5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52599618/

相关文章:

php - 使用上传的 CSV 中的值创建/填写表单

php - 从分隔字符串中删除尾随分隔字符

hdf5 - 不支持的 HDF5 版本

c++ - 使用H5Cpp.h头文件编译C++程序

python - Dask 扁平化字典列

c# - CSV 文件到位图

php - 从导入的 .csv 文件中删除 BOM ()

lua - 使用Torch-hdf5将Tensor保存到Hdf5

pandas - 如何在 dask 中并行化 groupby()?

python-3.x - Dask 应用自定义功能