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 从二进制文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章