小编Ian*_*Ian的帖子

删除 Dask 中的空分区

从 CSV 加载数据时,某些 CSV 无法加载,导致分区为空。我想删除所有空分区,因为某些方法似乎不适用于空分区。我曾尝试重新分区,在那里(例如)repartition(npartitions=10)有效,但大于此值的值仍然会导致空分区。

实现这一目标的最佳方法是什么?谢谢。

python dask

8
推荐指数
1
解决办法
1721
查看次数

Dask:创建严格递增索引

正如有据可查的那样,Dask 在reset_index调用时会在每个分区的基础上创建一个严格递增的索引,从而导致整个集合上出现重复的索引。在 Dask 中创建严格递增索引(不必是连续的)在整个集合上的最佳方法(例如计算最快)是什么?我希望map_partitions能传递分区号,但我认为不会。谢谢。

编辑

谢谢@MRocklin,我已经做到了这一点,但我需要一些关于如何将我的系列与原始数据框重新组合的帮助。

def create_increasing_index(ddf:dd.DataFrame):
    mps = int(len(ddf) / ddf.npartitions + 1000)
    values = ddf.index.values

    def do(x, max_partition_size, block_id=None):
        length = len(x)
        if length == 0:
            raise ValueError("Does not work with empty partitions. Consider using dask.repartition.")

        start = block_id[0] * max_partition_size
        return da.arange(start, start+length, chunks=1)

    series = values.map_blocks(do, max_partition_size=mps, dtype=np.int64)
    ddf2 = dd.concat([ddf, dd.from_array(series)], axis=1)
    return ddf2
Run Code Online (Sandbox Code Playgroud)

我收到错误“ValueError:无法将 DataFrame 与指定 axis=1 的未知除法连接”。有没有比使用 dd.concat 更好的方法?谢谢。

再次编辑

实际上,就我的目的而言(以及我测试的数据量 - 只有几 GB),cumsum 已经足够快了。当这变得太慢时我会重新访问!

python python-3.x dask

7
推荐指数
1
解决办法
1452
查看次数

从生成器延迟创建 dask 数据框

我想从生成器懒惰地创建一个 Dask 数据框,它看起来像:

[parser.read(local_file_name) for local_file_name in repo.download_files())]
Run Code Online (Sandbox Code Playgroud)

parser.read 和 repo.download_files 都返回生成器(使用yield)。parser.read 生成一个键值对字典,它(如果我只是使用普通的 pandas)会将每个字典收集到一个列表中,然后使用:

df = pd.DataFrame(parsed_rows)
Run Code Online (Sandbox Code Playgroud)

从中创建 dask 数据框的最佳方法是什么?原因是a)我不一定知道返回的结果数量,b)我不知道它将部署的机器的内存分配。

或者我应该采取什么不同的做法(例如,也许创建一堆数据帧,然后将它们放入 dask 中?)

谢谢。

python pandas dask

5
推荐指数
1
解决办法
1764
查看次数

Dask:Groupby 和 agg 中的“第一个”/“最后一个”

我想对单个列进行分组,然后agg对几列使用平均值,但只选择firstlast对其余列。这在 pandas 中是可能的,但目前在 Dask 中不支持。这个怎么做?谢谢。

aggs = {'B': 'mean', 'C': 'mean', 'D': 'first', 'E': 'first'}
ddf.groupby(by='A').agg(aggs)
Run Code Online (Sandbox Code Playgroud)

python dask pandas-groupby

5
推荐指数
1
解决办法
1046
查看次数

Pathos:在 Linux 上强制生成

我有可以在 Windows 上运行的 Python 代码,但是在 Linux 上运行时它就会挂起。我正在使用 JPype,因此我怀疑多个共享进程尝试使用同一管道访问 Java 可能存在一些问题(创建了不同的进程,但挂在 JPype 行)。有没有办法强制在 Pathos 中生成以复制 Windows 实现?(例如常规多处理库中的 set_start_method 或 get_context ?)

谢谢。

linux spawn python-multiprocessing pathos python-3.5

1
推荐指数
1
解决办法
1086
查看次数