来自平面文本文件的分布式 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)
我正在尝试将矩阵的平面文本文件(制表符分隔)表示读取到 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)