Улучшение производительности переписывания временных меток в файлах паркета - PullRequest
1 голос
/ 04 июня 2019

Из-за некоторых ограничений потребителя моих данных мне нужно «переписать» некоторые файлы паркета, чтобы преобразовать временные метки с точностью до наносекунды в временные метки с точностью до миллисекунды.

Я реализовал это, и оно работает, но я не полностью удовлетворен этим.

import pandas as pd

        df = pd.read_parquet(
            f's3://{bucket}/{key}', engine='pyarrow')

        for col_name in df.columns:
            if df[col_name].dtype == 'datetime64[ns]':
                df[col_name] = df[col_name].values.astype('datetime64[ms]')

        df.to_parquet(f's3://{outputBucket}/{outputPrefix}{additionalSuffix}',
                      engine='pyarrow', index=False)

В настоящее время я запускаю это задание в лямбде для каждого файла, но я вижу, что это может быть дорого и не всегда работать, если задание длится более 15 минут, поскольку это максимальное время, которое может запустить лямбда.

Файлы могут быть на большей стороне (> 500 МБ).

Какие-нибудь идеи или другие методы, которые я мог бы рассмотреть? Я не могу использовать pyspark, поскольку в моем наборе данных есть целые числа без знака.

1 Ответ

0 голосов
/ 04 июня 2019

Вы можете попробовать переписать все столбцы одновременно.Возможно, это уменьшит количество копий памяти в пандах, что ускорит процесс, если у вас много столбцов:

df_datetimes = df.select_dtypes(include="datetime64[ns]")
df[df_datetimes.columns] = df_datetimes.astype("datetime64[ms]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...