Читать несколько файлов из S3 быстрее в Python - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть несколько файлов в папке s3 bucket. В python я читал файлы один за другим и использовал concat для одного кадра данных. Тем не менее, это довольно медленно. Если у меня будет миллион файлов, это будет очень медленно. Есть ли другой доступный метод (например, bash), который может увеличить процесс чтения файлов s3?

response = client.list_objects_v2(
        Bucket='bucket',
        Prefix=f'key'
        )
dflist = []

for obj in response.get('Contents', []):
    dflist.append(get_data(obj,col_name))

pd.concat(dflist)

def get_data(obj, col_name):
    data = pd.read_csv(f's3://bucket/{obj.get("Key")}', delimiter='\t', header=None, usecols=col_name.keys(),
                       names=col_name.values(), error_bad_lines=False)
    return data

1 Ответ

0 голосов
/ 11 апреля 2019

Поскольку s3 равно object storage, вам необходимо перенести файл на компьютер (т.е. прочитать файл в памяти) и отредактировать его, а затем снова нажать (перезаписать объект).

Таким образом, потребовалось некоторое время , чтобы выполнить вашу задачу.

некоторые вспомогательные указатели:

  1. Если вы обрабатываете несколько файлов в нескольких потоках, которые вам помогут.
  2. Если ваши данные действительно тяжелые, запустите экземпляр на awsв том же регионе, где находится ваше ведро, и обрабатывать данные оттуда и завершать его.(это сэкономит стоимость сети + время на извлечение и передачу файлов по сети)
...