Dask简介(python)

安装
pip install dask

在这里插入图片描述
高级集合被用来生成任务图,这些任务图可以由单机或集群上的调度器执行。

导包
import numpy as np
import pandas as pd

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

创建一个Dask对象

1. from panda DataFrame
index = pd.date_range("2021-09-01", periods=2400, freq="1H")# 从"2021-09-01"开始,间隔1小时,创建2400个元素
print(index.shape)# (2400,)
df = pd.DataFrame({"a": np.arange(2400), "b": list("abcaddbe" * 300)}, index=index)
#

在这里插入图片描述

ddf = dd.from_pandas(df, npartitions=10)

在这里插入图片描述

现在创建了一个Dask DataFrame,有2列2400行,由10个分区组成,每个分区有240行。每个分区代表一块数据。

ddf.divisions
#检查每个分区所覆盖的索引值

在这里插入图片描述
索引Dask集合的感觉就像切分NumPy数组或pandas DataFrame。

print(ddf.b)

在这里插入图片描述
此时看到的b数据列不是真实的数据,想看真实的数据要

print(ddf.b.compute())

在这里插入图片描述

ddf.a.mean().compute()#1199.5

ddf.b.unique().compute()
"""
0    a
1    b
2    c
3    d
4    e
Name: b, dtype: object
"""

任务图的可视化

result = ddf["2021-10-01": "2021-10-09 5:00"].a.cumsum() - 100
result.compute()
'''
2021-10-01 00:00:00       620
2021-10-01 01:00:00      1341
2021-10-01 02:00:00      2063
2021-10-01 03:00:00      2786
2021-10-01 04:00:00      3510
                        ...  
2021-10-09 01:00:00    158301
2021-10-09 02:00:00    159215
2021-10-09 03:00:00    160130
2021-10-09 04:00:00    161046
2021-10-09 05:00:00    161963
Freq: H, Name: a, Length: 198, dtype: int32
'''
#pip install graphviz
result.visualize()

在这里插入图片描述

低级接口(自定义?)

Dask Delayed让你把单个函数调用包装成一个延迟执行的任务图。


import dask

@dask.delayed
def inc(x):
   return x + 1

@dask.delayed
def add(x, y):
   return x + y

a = inc(1)       # no work has happened yet
b = inc(2)       # no work has happened yet
c = add(a, b)    # no work has happened yet

c = c.compute()  # This triggers all of the above computations
print(c)#5

Futures 一旦函数被提交,计算就开始了。

from dask.distributed import Client

client = Client()

def inc(x):
   return x + 1

def add(x, y):
   return x + y

a = client.submit(inc, 1)     # work starts immediately
b = client.submit(inc, 2)     # work starts immediately
c = client.submit(add, a, b)  # work starts immediately

c = c.result()                # block until work finishes, then gather result
print(c)#5

调度器

在生成了一个任务图之后,执行它是调度器的工作。
默认情况下,当你在Dask对象上调用计算时,Dask会使用你电脑上的线程池来并行运行计算。
如果你想要更多的控制,可以使用分布式调度器来代替。尽管它的名字里有 “分布式”,但分布式调度器在单机和多机上都能很好地工作。可以把它看作是 “高级调度器”。

1 建立一个只使用本地计算机的集群
from dask.distributed import Client

client = Client()
print(client)

在这里插入图片描述
一旦你创建了一个客户端,任何计算都将在它所指向的集群上运行。

2 设置远程集群

from dask.distributed import Client
client = Client("<url-of-scheduler>")
print(client)

诊断仪表

当使用分布式集群时,Dask提供了一个诊断仪表板,你可以看到你的任务被处理的情况。

print(client.dashboard_link)
#'http://127.0.0.1:61518/status'

在这里插入图片描述

DASK 文档

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值