Dask 从二进制文件中读取数据

Posted

技术标签:

【中文标题】Dask 从二进制文件中读取数据【英文标题】:Dask Read Data from Binary File 【发布时间】:2018-06-25 13:55:59 【问题描述】:

我正在尝试在 python 中实现 k-means 聚类算法的核心处理版本。我从这个 git 项目K-Mean Parallel...Dask...

中了解了 dask

我使用相同的 git 项目,但我试图加载我的二进制文件形式的数据。二进制文件包含每个具有 1024 个浮点特征的数据点。

我的问题是,如果数据非常大,即大于可用内存本身,我该如何加载?我尝试使用 numpy 的 fromFile 函数,但我的内核不知何故死了。我的一些问题是:

问。是否可以将数据加载到从其他来源创建的 numpy 中(该文件不是由 numpy 而是由 c 脚本创建的)?


问。是否有可以直接从二进制文件加载数据的 dask 模块?我见过使用 csv 文件,但与二进制文件无关。

【问题讨论】:

【参考方案1】:

我只涉足 Dask,但通过 Dask 延迟在下面的代码中调用 np.fromfile 应该可以让您懒惰地使用它。也就是说,我自己正在处理这个问题,所以目前这只是部分答案。

对于您的第一个问题:我目前使用与此类似的代码加载由 Labview 程序创建的 .bin 文件,没有问题:

import numpy as np
method = "b+r"  # binary read method
chunkSize = 1e6 # chunk as needed for your purposes
fileSize = os.path.getsize(myfile) 
data = []
with open(myfile,method) as file:
    for chunk in range(0,fileSize,chunkSize):
        data.append(np.fromfile(file,dtype=np.float32,chunk))

对于第二个问题:我无法在 Dask 中找到任何用于处理二进制文件的内容。我发现转换为 Dask 可以使用的东西是值得的。

【讨论】:

如this dask blog post 所示,可以从单个文件中创建dask.delayed 对象。但是,如本答案所示将其分块可能并不简单。

以上是关于Dask 从二进制文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

从二进制文件中读取矩阵

从二进制文件中读取并转换为双精度?

在python中如何从二进制文件中读取信息

PHP如何将从二进制文件中读取的字节转换为数字

在 Swift 中从二进制文件中读取整数

使用 c++ 时从二进制文件中读取 int 不正确