Старая версия modin: «NotImplementedError: должна быть реализована в дочерних классах» - PullRequest
0 голосов
/ 29 января 2020

Я использую Dataiku DSS для проекта. Среда использует pandas==0.23.4 и говорит, что это невозможно обновить:

# These are the packages required for the selected core features.
# These packages cannot be removed nor reversioned

Чтобы использовать modin с dask в качестве бэкэнда для pandas, мне пришлось установить modin==0.3 для поддержки этого версия pandas. Все это работало хорошо, и я видел очень впечатляющие времена выполнения по сравнению с голым pandas. Однако затем я выполнил некоторый код и получил следующую трассировку стека:

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-36-d10eb0fc575f> in <module>
    3 # modin[ray]:
    4 start = time.time()
----> 5 output_result = process_with_sampling()
    6 runtime(start)

<ipython-input-35-090b75613bb5> in process_with_sampling(loc_to_select_)
    11             output_concat,
    12             pd.DataFrame(df_limited.groupby('id')['attributed_conversions'].apply(sum).iloc[0]).fillna('')
---> 13         ],axis=0)
    14     return output_concat

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/pandas/concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    116         verify_integrity=False,
    117         copy=True,
--> 118         sort=False,
    119     )
    120     result_df = DataFrame(query_compiler=new_query_compiler)

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/data_management/query_compiler/pandas_query_compiler.py in concat(self, axis, other, **kwargs)
    298             Concatenated objects.
    299         """
--> 300         return self._append_list_of_managers(other, axis, **kwargs)
    301 
    302     def _append_list_of_managers(self, others, axis, **kwargs):

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/data_management/query_compiler/pandas_query_compiler.py in _append_list_of_managers(self, others, axis, **kwargs)
    311         ignore_index = kwargs.get("ignore_index", False)
    312         new_self, to_append, joined_axis = self.copartition(
--> 313             axis ^ 1, others, join, sort
    314         )
    315         new_data = new_self.concat(axis, to_append)

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/data_management/query_compiler/pandas_query_compiler.py in copartition(self, axis, other, how_to_join, sort)
    417 
    418             reindexed_self, reindexed_other = reindexed_self.copartition_datasets(
--> 419                 axis, other[i].data, reindex_left, reindex_right
    420             )
    421             reindexed_other_list.append(reindexed_other)

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/engines/base/block_partitions.py in copartition_datasets(self, axis, other, left_func, right_func)
    299                 axis,
    300                 right_func,
--> 301                 new_self.block_lengths if axis == 0 else new_self.block_widths,
    302             )
    303         return new_self, new_other

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/engines/base/block_partitions.py in manual_shuffle(self, axis, shuffle_func, lengths)
1061             partitions = self.column_partitions
1062         func = self.preprocess_func(shuffle_func)
-> 1063         result = np.array([part.shuffle(func, lengths) for part in partitions])
1064         return self.__constructor__(result) if axis else self.__constructor__(result.T)
1065 

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/engines/base/block_partitions.py in <listcomp>(.0)
1061             partitions = self.column_partitions
1062         func = self.preprocess_func(shuffle_func)
-> 1063         result = np.array([part.shuffle(func, lengths) for part in partitions])
1064         return self.__constructor__(result) if axis else self.__constructor__(result.T)
1065 

~/dataiku/dss_data/code-envs/python/victor/lib/python3.6/site-packages/modin/engines/base/axis_partition.py in shuffle(self, func, lengths, **kwargs)
    52              A list of `BaseRemotePartition` objects.
    53         """
---> 54         raise NotImplementedError("Must be implemented in children classes")
    55 
    56     # Child classes must have these in order to correctly subclass.

NotImplementedError: Must be implemented in children classes

Есть ли обходной путь для этого? Я думал, что modin должен вернуться обратно к голому pandas для любых методов, которые не реализованы?

Редактировать: Это строка в исходном коде modin, в которой возникает ошибка.

Редактировать 2: там есть исходный код 0.3 похоже, что дочерние классы не реализованы для BaseFrameAxisPartition. Я все еще хотел бы найти какое-то решение этой проблемы, поскольку я не уверен, возможно ли вообще обновить pandas в DSS.

...