Вы всегда можете просто использовать numpy.unique
:
import dask.array as da
import numpy as np
dx = da.random.random((10000, 10000), chunks=(1000, 1000))
dx = np.unique(dx, axis=0)
Это может по-прежнему вызывать проблемы с памятью, когда вы пытаетесь использовать его с «наборами данных, превышающими мою оперативную память», поскольку он будет выполнять вычисления на одном узле.Существует функция dask.array.unique
, но она пока не поддерживает ключевое слово axis
.Это означает, что он сгладит массив и вернет уникальные отдельные значения, а не уникальные строки.Кажется, что функции сортировки, которые допускали бы любой вид свернутой вручную параллельной версии, также не реализованы в dask.array
.
Я бы порекомендовал просто смириться с этим и преобразовать в dask.dataframe
.Этот подход гарантирует, что вы получите правильный вывод, даже если это не самая быстрая реализация.
Edit
Сначала я подумал, что может быть простой взлом, который можно использовать для реализации axis
параметр для dask.array.unique
.Однако трюк типа , который numpy.unqiue
использует для реализации своего собственного ключевого слова axis
, оказывается непростым переносом в массивы Dask из-за наличия фрагментов.
пока без умного гадания.Просто используйте dask.dataframe
.