1

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

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

但是,我不清楚如何使用可用的工具将文本文件解析为矩阵结构。在 PySpark 中,我可以使用一个简单map的 UDF 来完成此操作,该 UDF 将每一行拆分为一个空格并将标记转换为浮点列表,最后将列表转换为 [indexed] numpy 数组。

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

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

这仅返回一个未来。如何为文本文件中的每一行生成未来?

4

1 回答 1

0

这里有几个步骤:

使用 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)
于 2016-06-03T00:32:44.060 回答