У меня огромная серия панд из 1007 миллионов строк строк. Я запускаю экстракт регулярного выражения на нем (поэтому задача независима от порядка строк, ее можно запускать параллельно), которая занимает несколько часов и выглядит так:
df["big_string_column"].str.extract(r"Name: (.*), Value: (.*)")
или же
df["big_string_column"].str.extractall(r"Name: (.*), Value: (.*)")
это возвращает новый DataFrame с двумя группами захвата и столбцами.
Есть ли способ использовать tqdm или что-то еще, чтобы показать прогресс для этого? :)
Может ли это быть реорганизовано в dataframe.progress_apply, который сохраняет группы захвата из регулярных выражений без значительных ударов производительности (поскольку pd.Series.str.extract оптимизирует регулярное выражение) или существует совершенно другой подход?
Я не знаю о функциях отчета о проделанной работе .str.extract
. Изменение его в .apply
для использования .progress_apply
может иметь плохие .progress_apply
производительности.
Это не симпатичный или однострочный, но если выполняемая работа независима от строки (без группировки), вы всегда можете просто разбить df
на куски, выполнять работу независимо на кусках и объединить их обратно на конец. Затем вы можете отслеживать ход выполнения куском с помощью tqdm.
Что-то вроде этого:
# 1000 sections as an example, may need to adapt to your problem
chunks = np.array_split(df, 1000)
processed = []
for chunk in tqdm(chunks):
processed.append(chunk.str.extract(r"Name: (.*), Value: (.*)"))
out = pd.concat(processed)
pd.concat
и я думаю, что ваш ответ сработает, поскольку у большинства людей недостаточно ОЗУ, поэтому они разбивают информационный кадр на куски, но я запускаю работу это раскручивает кластер с достаточным объемом оперативной памяти 300 Гб, а затем после задания ~ 3 часа $ 10 отключается. Я надеялся узнать, знает ли кто-нибудь другой «хороший» способ сделать это, поэтому я одобряю, но жду лучших ответов, если таковые имеются.