Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带定界符前瞻的s3fs读取块?_Python_Amazon S3_Distributed Computing - Fatal编程技术网

Python 带定界符前瞻的s3fs读取块?

Python 带定界符前瞻的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”。我永远不会得到“比萨饼”,因为分裂存在于一条线的中间

我正在使用s3fs
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')