我在S3上输入的数据存储为单个大文件。 我希望Dask自动切断文件,分发给工作人员并管理数据流。因此,使用分布式集合的想法,例如,袋。
在每个worker上,我都有一个从文件中读取数据的命令行工具(Java)。因此,我想将一大块数据写入文件,调用外部CLI /代码来处理数据,然后从输出文件中读取结果。这看起来像处理批量数据而不是一次记录。
解决这个问题的最佳方法是什么?是否可以在工作程序上将分区写入磁盘并将其作为一个整体进行处理?
PS。保留在分布式集合模型中也是必要的,但也是可取的,因为对数据的其他操作可能是更简单的Python函数,它们按记录处理数据。
答案 0 :(得分:3)
您可能需要read_bytes功能。这会将文件分成许多块,这些块通过分隔符(如结束线)完全拆分。它会返回一个dask.delayed对象列表,指向那些字节块。
此文档页面上提供了更多信息:http://dask.pydata.org/en/latest/bytes.html
以下是docstring的一个例子:
>>> sample, blocks = read_bytes('s3://bucket/2015-*-*.csv', delimiter=b'\n')