我尝试将矩阵的平面文本文件(制表符分隔)表示读取到dask
数组中,使用distributed
在整个群集中分布数组的块。
(旁白:这与PySpark' s sc.textFile
方法不同)
但是,我不清楚如何使用可用工具将文本文件解析为矩阵结构。在PySpark中,我可以使用简单的map
来实现这一点,其中UDF将空格上的每一行拆分并将标记转换为浮点数列表,最后将列表转换为[索引的] numpy数组。
我开始使用dask.bag.read_text
方法,该方法的参数collection
我可以设置为False
,因此它可以将一堆Delayed
期货交给我。 如何将这些解析为最终矩阵的行?
from dask.bag import read_text
matrix = read_text(filename.txt, collection = False)
这只会返回一个未来。如何为文本文件中的每一行生成未来?
答案 0 :(得分:0)
这里有几个步骤:
默认情况下,read_text
将每个文件视为单个流分区。如果您希望将数据分成几部分,请使用blocksize=
关键字参数
futures = db.read_text('filename.txt', collection=False, blocksize=10000000)
使用你控制的未来,大概你会创建一个函数来将你的列表转换为numpy数组
def list_to_array(L):
my_array = ...
return my_array
我们将每个未来转换为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)