Что возвращать в функцию предварительной обработки для оптимальной производительности ⇐ Python

Программы на Python
Anonymous
Что возвращать в функцию предварительной обработки для оптимальной производительности

Сообщение Anonymous »

Моя отправная точка — LazyFrame с большими полярами.
Я написал функцию (

Код: Выделить всё

def preprocessing(df:pl.Lazyframe
), которая должна принимать pl.LazyFrame (к сожалению, это не может быть pl.Expr).

Функция, которая выполняет длинную цепочку операции над разными столбцами ленивого кадра. Наконец, вывод/возврат функции предварительной обработки осуществляется только в последнем столбце, который должен быть добавлен к начальному/входящему ленивому кадру.
Какой теперь будет лучший/оптимизированный тип возврата для запроса? планировщик, который будет интегрирован в исходный фрейм данных? Должен ли я просто выполнить .collect().to_series() и добавить его через .with_columns()? Но это потребует сбора и, следовательно, сокращения потенциала для оптимизации. Есть ли способ вернуть серию и собрать?
К сожалению, не могу поделиться кодом. Однако вот псевдо/макет кода:

Код: Выделить всё

def preprocessing(
df: pl.LazyFrame | pl.DataFrame,
) -> pl.Series : #? tbd return type
return (
df.lazy()
.with_columns(
[
pl.col("some_col")
.cast(pl.Int64)
.cast(pl.Utf8)
.str.pad_start(5, "0")
.alias("some_col_preprocessed"),
pl.col("other_col")
.cast(pl.Int64)
.cast(pl.Utf8)
.str.pad_start(7, "0")
.alias("other_col_preprocessed"),
],
)
# ... more steps
.select(
pl.concat_str(
[
pl.col("some_col_preprocessed"),
pl.col("other_col_preprocessed"),
pl.lit("42133723"),
],
)
).collect().to_series()

starting_df = starting_df.with_columns(final_col=preprocessing(starting_df))
Недостатки возврата серий
Я только что осознал серьезный недостаток текущего подхода (

Код: Выделить всё

.collect().to_series
) может подвергнуть меня опасности, если один из шагов изменит порядок или если я забуду аргумент Maintenance_order.
Другие альтернативы
  • Нахождение столбца идентификатора и использование соединения
  • Использование контекста выражения with_columns и просто передача, обработка и возврат всего ленивого кадра, даже не вызов .collect()


Подробнее здесь: https://stackoverflow.com/questions/790 ... erformance

Вернуться в «Python»