我有超过35000行的熊猫系列。我想使用dask使其更有效率。但是,我的dask代码和pandas代码同时使用。
最初“ ser” 是熊猫系列,而 fun1 和 fun2 是在系列的各个行中执行模式匹配的基本功能。
熊猫
ser = ser.apply(fun1).apply(fun2)
黄昏
ser = dd.from_pandas(ser, npartitions = 16)
ser = ser.apply(fun1).apply(fun2)
在检查cpu核心的状态时,我发现并不是所有的核心都被使用了。只有一个内核已经习惯了100%。
是否有任何方法可以在使用dask进行串行操作时加快使用dask的速度,或者利用cpu的所有内核?
答案 0 :(得分:10)
请参见http://dask.pydata.org/en/latest/scheduler-overview.html
您正在调用的函数很可能是纯python的,因此要求使用GIL,该锁可确保在一个线程中一次仅执行一条python指令。在这种情况下,您将需要在单独的进程中运行函数以查看任何并行性。您可以通过使用多进程调度程序来做到这一点
ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')
或使用分布式调度程序(在单个计算机上运行良好,并且实际上具有一些下一代优势,例如状态仪表板);在最简单的默认情况下,创建一个客户端就足够了:
client = dask.distributed.Client()
但是您应该阅读the docs