Как отправить функцию в Dask, если функция не находится на уровне модуля? - PullRequest
0 голосов
/ 29 января 2020

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

from scipy.sparse import coo_matrix
coo_matrix((3, 4), dtype=np.int8).toarray()

Это возвращает массив. Я попытался преобразовать разреженную матрицу, как показано ниже:

from scipy import sparse
# Some code here
#
#
my_sparse_matrix = sparse.coo_matrix((3, 4), dtype=np.int8)
my_sparse_matrix = client.scatter(my_sparse_matrix)  # Send to the distributed system
# submit conversion function (to the distributed system)
my_result = self.client.submit(sparse.csr_matrix.toarray, my_sparse_matrix)
client.gather(my_result)

, которая вернула эту ошибку:

{AttributeError}_swap not found

И я получаю эту ошибку, потому что .toarray() не является функцией уровня модуля , Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 07 февраля 2020

Ваш код работает нормально, но я считаю, что у вас есть опечатка: вы должны использовать метод, соответствующий объекту, с которым хотите работать, но вы использовали csr_matrix в вызове submit вместо coo_matrix, который это то, что my_sparse_matrix ссылки. Следующие работы:

>>> from scipy import sparse
>>> my_sparse_matrix = sparse.coo_matrix((3, 4), dtype=np.int8)
>>> my_sparse_matrix = client.scatter(my_sparse_matrix)
>>> my_result = client.submit(sparse.coo_matrix.toarray, my_sparse_matrix)
>>> client.gather(my_result)
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)

К сожалению, сообщение об ошибке не дает очевидной причины, но вы получаете то же сообщение без Dask:

>>> arr = sparse.coo_matrix((3, 4), dtype=np.int8)
>>> parse.csc_matrix.toarray(arr)
AttributeError: _swap not found
...