Python 带定界符前瞻的s3fs读取块?
我正在使用s3fsPython 带定界符前瞻的s3fs读取块?,python,amazon-s3,distributed-computing,Python,Amazon S3,Distributed Computing,我正在使用s3fsread_block在多个进程中平均分配csv。每个进程都需要指定一个字节范围,以便独立于其他进程进行操作和工作。csv中的每一行都需要在不重叠的情况下进行处理 问题是字节范围的开始和结束不太可能是行的开始和结束。所以有些线路可能会被切断 比如说- 我的csv看起来像这样- beer\npizza\nwings 我想用9个字节的块来处理它。对于字节范围0-9,我将得到“啤酒”。对于字节范围10-16,我将得到“wings”。我永远不会得到“比萨饼”,因为分裂存在于一条线的中间
read_block
在多个进程中平均分配csv。每个进程都需要指定一个字节范围,以便独立于其他进程进行操作和工作。csv中的每一行都需要在不重叠的情况下进行处理
问题是字节范围的开始和结束不太可能是行的开始和结束。所以有些线路可能会被切断
比如说-
我的csv看起来像这样-
beer\npizza\nwings
我想用9个字节的块来处理它。对于字节范围0-9,我将得到“啤酒”。对于字节范围10-16,我将得到“wings”。我永远不会得到“比萨饼”,因为分裂存在于一条线的中间< < /P>
beer\npizza\nwings
__________^_______
我需要的是某种前瞻性。我希望得到0-9之间的字节,以及形成下一行所需的任何附加字节。然后我的结果将是beer\npizza
,wings
前瞻是看待这一问题的正确方法还是有其他解决方案?如果lookahead是实现这一点的正确方法,那么是否可以使用s3fs来实现,或者我是否需要一个自定义实现来首先执行此lookahead以找到正确的字节范围
编辑:
自定义实现示例:
if self._lookahead:
self._logger.debug('Performing lookahead')
"""Use lookahead to find next newline in csv"""
self._logger.debug(f'{end - 1}, {self._lookahead + 1}')
r = s3.read_block(self._s3_path, end - 1, self._lookahead + 1)
if '\n' not in (r[0], r[1]):
"""Range ends in the middle of a line. Look ahead for the next newline"""
read_length = read_length + r.index(b'\n')
self._logger.debug(f'New end found {read_length}')
从。只需将分隔符传递给read_block()函数即可。
希望有帮助:
s3.read_block(path, offset=1000, length=10, delimiter=b'\n')
从。只需将分隔符传递给read_block()函数即可。
希望有帮助:
s3.read_block(path, offset=1000, length=10, delimiter=b'\n')