gpt4 book ai didi

python - 在不使用 dask 数据框的情况下获取 dask 数组的唯一行

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:39 29 4
gpt4 key购买 nike

有没有办法获取大于可用内存的 dask 数组的唯一行?理想情况下,不将其转换为 dask DataFrame?

我目前使用这种方法

import dask.array as da
import dask.dataframe as dd

dx = da.random.random((10000, 10000), chunks=(1000, 1000))
ddf = dd.from_dask_array(dx)
ddf = ddf.drop_duplicates()
dx = ddf.to_dask_array(lengths=True)

适用于比 np.unique(dx, axis=0) 更大的数据集,但最终也会耗尽内存。

我正在使用 Python 3.6(但可以升级)、Dask 0.20 和 Ubuntu 18.04 LTS。

最佳答案

你总是可以只使用 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)

当您尝试将它与“大于我的 RAM 的数据集”一起使用时,这可能仍然会给您带来内存问题,因为它将在单个节点上运行计算。有一个 dask.array.unique 函数,但它还不支持 axis 关键字。这意味着它将展平数组并返回唯一的单个值,而不是唯一的行。 dask.array 似乎也没有实现允许任何类型的手动并行化版本的排序功能。

我的建议是暂时接受它并转换为 dask.dataframe。这种方法可确保您获得正确的输出,即使它不是最快的实现方式。

编辑

我最初认为可能有一个简单的 hack 可以用来为 dask.array.unique 实现 axis 参数。然而,blob type trick that numpy.unqiue uses to implement its own axis keyword由于 block 的存在,事实证明不容易转移到 Dask 阵列。

所以现在没有聪明的解决方法。只需使用 dask.dataframe

关于python - 在不使用 dask 数据框的情况下获取 dask 数组的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53389534/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com