ImportError: невозможно импортировать имя 'frame_apply' - PullRequest
0 голосов
/ 17 октября 2019

Структура моего проекта примерно такая: есть три файла py - main.py, main_lib.py и helper_lib.py. main_lib и helper_lib импортируются в main.py.

Я импортирую dask.dataframe в helper_lib.py и у меня есть вспомогательная функция для создания кадра данных dask из кадра данных pandas, например:

import dask.dataframe as ddf

def get_dask_df(df: pd.DataFrame):
  return ddf.from_pandas(df, npartitions=2)

Эта функция вызывается как вhelper_lib.py и main.py.

Код, вызывающий ошибку ImportError, выглядит примерно так -

  data_dask_df = helper_lib.get_dask_df(data)
  result['area'] = data_dask_df[['length', 'width']].apply(
      lambda x: helper_lib.calculate_area(x),
      meta=('int'),
      axis=1).compute()

Вот трассировка стека -

  File "/xxx/dask/base.py", line 156, in compute
    (result,) = compute(self, traverse=False, **kwargs)
  File "/xxx/dask/base.py", line 398, in compute
    results = schedule(dsk, keys, **kwargs)
  File "/xxx/dask/threaded.py", line 76, in get
    pack_exception=pack_exception, **kwargs)
  File "/xxx/dask/local.py", line 462, in get_async
    raise_exception(exc, tb)
  File "/xxx/dask/compatibility.py", line 112, in reraise
    raise exc
  File "/xxx/dask/local.py", line 230, in execute_task
    result = _execute_task(task, data)
  File "/xxx/dask/core.py", line 119, in _execute_task
    return func(*args2)
  File "/xxx/dask/optimization.py", line 942, in __call__
    dict(zip(self.inkeys, args)))
  File "/xxx/dask/core.py", line 149, in get
    result = _execute_task(task, cache)
  File "/xxx/dask/core.py", line 119, in _execute_task
    return func(*args2)
  File "/xxx/dask/compatibility.py", line 93, in apply
    return func(*args, **kwargs)
  File "/xxx/dask/dataframe/core.py", line 3879, in apply_and_enforce
    df = func(*args, **kwargs)
  File "/xxx/dask/utils.py", line 772, in __call__
    return getattr(obj, self.method)(*args, **kwargs)
  File "/xxx/pandas/core/frame.py", line 6477, in apply
    from pandas.core.apply import frame_apply
ImportError: cannot import name 'frame_apply'

У меня есть этот импорт в main_lib иhelper_lib -

import pandas as pd

Я попытался скопировать функцию get_dask_df в main_lib и helper_lib и импортировать dask в обоих. По-прежнему не работает.

По Интернету кажется, что это как-то связано с циклическим / множественным импортом, или что frame_apply уже был импортирован в другое место, и поэтому он вызывает ImportError в этом отложенном импорте.

Как я могу отладить / решить эту проблему?

...