изменяющаяся скорость при чтении строки в CSV в пандах - PullRequest
0 голосов
/ 08 ноября 2019

Мы используем SFTP для доставки файлов из предварительной загрузки в EC2 и затем, наконец, загрузим их в хранилище данных S3.

Файлы представляют собой простые текстовые файлы и после загрузки в хранилище данных, мыВы используете Python3 pandas для создания одного и того же структурированного фрейма данных (некоторая бизнес-логика для обработки данных).

Код был разработан и протестирован локально с тестовыми файлами, локально присутствующими на моем компьютере с ОС Windows, и обычно занимает парусекунд, чтобы закончить преобразование. Но когда тот же код был перенесен в EC2 и SFTP-файлы, читаемые из S3, он начал обрабатываться вечно.

После запуска кода в режиме отладки (py-console) на EC2 мы быливозможность отследить команду, которая вызывала медлительность, поэтому мы попробовали различные сценарии, как указано ниже.

ДЛЯ ЛОКАЛЬНОГО ИЛИ ЛОКАЛЬНОГО EC2

file = open('/path/to/file/abc.out', 'r')

for line in file:
    ##############
    BUSINESS LOGIC
    ##############

FOR S3

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, key)
body = obj.get()['Body']
for line in body.read().decode('utf-8').split('\n'):
    ##############
    BUSINESS LOGIC
    ##############

Для каждого сценария файл успешно считывался в строку (после всей обработки бизнес-логики) (в течение секунды). Но когда мы пытаемся создать кадр данных строки, он имеет следующие поведения:

formatted_data = BUSINESS LOGIC

final_data = StringIO(formatted_data)

# reading data into a dataframe
df = pd.read_csv(final_data, sep='|')

АНАЛИЗ СЦЕНАРИЙ

| FILE LOCATION                                     | PROCESSING | TIME TO EXECUTE |
------------------------------------------------------------------------------------
| WINDOWS LOCAL                                     | LOCAL      | SECONDS         |
| COPY LOCAL TO S3                                  | EC2        | SECONDS         |
| DOS2UNIX ON LOCAL & COPY TO S3                    | EC2        | HOURS           |
| UNIX2DOS ON LOCAL & COPY TO S3                    | EC2        | SECONDS         |
| SFTP TO EC2                                       | EC2        | SECONDS         |
| SFTP TO EC2 & COPY TO S3                          | EC2        | HOURS           |
| SFTP TO EC2 & COPY TO S3 & RE-COPY FROM S3 TO EC2 | EC2        | SECONDS         |

Из анализа мы подумалипроблема заключается в кодировке файлов Unix на S3. Но тот же файл, когда загружается в EC2, работает просто отлично. Кроме того, мы декодируем при чтении из S3 в для оператора . Любое понимание того, что может быть причиной? Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...