来自平面文本文件的分布式 dask 矩阵

Distributed dask matrix from flat text file

我正在尝试将矩阵的平面文本文件(制表符分隔)表示读取到 dask 数组中,使用 distributed 将数组的块分布到集群中。

(旁白:这与 PySpark 的 sc.textFile 方法没有什么不同)

但是,我不清楚如何使用可用的工具将文本文件解析为矩阵结构。在 PySpark 中,我可以用一个简单的 map 和一个 UDF 来完成这个.

我从 dask.bag.read_text 方法开始,它有一个参数 collection,我可以将其设置为 False,这样它就会返回一堆 Delayed 期货。 如何将这些解析为最终矩阵的行?

from dask.bag import read_text
matrix = read_text(filename.txt, collection = False)

这returns只有一个未来。如何为文本文件中的每一行生成未来?

这里有几个步骤:

使用 read_text

将单个文件拆分为多个文件

默认情况下 read_text 将每个文件视为单个流式传输分区。如果您更喜欢将数据分成几部分,请使用 blocksize= 关键字参数

futures = db.read_text('filename.txt', collection=False, blocksize=10000000)

将文本列表的未来转换为 numpy 数组的未来

使用您可以控制的期货,大概您将创建一个函数来将您的列表转换为 numpy 数组

def list_to_array(L):
    my_array = ...
    return my_array

将期货转换为小 dask.arrays

我们将每个未来转换成 dask.array

from distributed.collections import futures_to_dask_arrays

arrays = futures_to_dask_arrays(futures)

将多个数组连接成一个数组

import dask.array as da

array = da.concatenate(arrays, axis=0)