Dask Bag 应用
- Dask Bag包提供了如map\filter\groupby和python对象的集合聚集。
- 类似于pythonnic版本的pyspark RDD。
Dask 包通常用于对非结构化或半结构化数据(如文本数据、日志文件、JSON 记录或用户定义的 Python 对象)的简单计算进行并行化。
Bag的优点:
Parallel:数据被拆分,允许多个内核或机器并行执行;
迭代:数据处理延迟,允许大于内存的数据平滑执行,即使在单个分区内的单个机器上;
默认情况下,dask.bag使用dask.multiprocessing的计算。作为一个好处,Dask 绕过GIL并在纯 Python 对象上使用多个内核。作为一个缺点,Dask Bag 在包含大量工作间通信的计算中表现不佳。对于常见的操作,这很少成为问题,因为大多数 Dask Bag 工作流程都是令人尴尬的并行,或者导致在工作人员之间几乎没有数据移动的情况下减少。某些操作,例如groupby,需要大量的工作间通信。在单台机器上,Dask 使用partd执行高效、并行、溢出到磁盘的洗牌。在集群中工作时,Dask 使用基于任务的 shuffle。
这些 shuffle 操作代价高昂,并且由 dask.dataframe. 最好使用dask.bag清理和处理数据,然后将其转换为数组或 DataFrame,然后再开始需要 shuffle 步骤的更复杂的操作。
Bags 提供了非常通用的计算(任何 Python 函数)。这种普遍性是有代价的。袋子具有以下已知限制:
- 默认情况下,它们依赖于多处理调度程序,它有自己的一组已知限制
- Bag 是不可变的,所以你不能改变单个元素
- Bag 操作往往比数组/DataFrame 计算慢,就像标准 Python 容器比 NumPy 数组和 Pandas DataFrames 慢一样
- 包的groupby慢。如果可能可以尝试使用 foldby。
Bag是允许重复的无序集合的数学名称。它是multiset的友好同义词。包或多重集是集合概念的概括,与集合不同,它允许多重集元素的多个实例:
- list:有重复的有序集合,[1, 2, 3, 2]
- set:无重复的无序集合, {1, 2, 3}
- bag:重复的无序集合,{1, 2, 2, 3}
所以,bag 就像一个列表,但它不能保证元素之间的排序。可以有重复的元素,但你不能要求第 i 个元素。
读取json数据:
import dask
import json
import os# 创建测试数据data=dask.datasets.make_people()
# 这里可能需要再安装mimesis包
# ! pip install mimesis#data.take(2)# 保存为json数据
data.map(json.dumps).to_textfiles("data/test_*.json")# 读取json数据import dask.bag as dbb=db.read_text("data/test_*.json").map(json.loads)
b.take(1)
常用方法
b.filter(lambda data:data["age"]<40).take(2)
# 过滤年龄小于40的b.count().compute()
# 统计记录数b.map(lambda data:data["occupation"]).take(1)# 链式计算# 获取最大年龄和最小的年龄
b.map(lambda data:data["age"]).max().compute()
b.map(lambda data:data["age"]).min().compute()
# 获取年龄出现频次最多的5个
b.map(lambda data:data["age"]).frequencies(sort=True).topk(5).compute()b=b.persist() # 保存到内存中# 转换和存储
b.filter(lambda x:x["age"]>40).map(json.dumps).to_textfiles("data/processed.*.json")# 转换为dataframe
def flatten(record):return {'age': record['age'],'occupation': record['occupation'],'telephone': record['telephone'],'credit-card-number': record['credit-card']['number'],'credit-card-expiration': record['credit-card']['expiration-date'],'name': ' '.join(record['name']),'street-address': record['address']['address'],'city': record['address']['city']}b.map(flatten).take(1)df = b.map(flatten).to_dataframe()
df.head()
bag支持链式计算,在一个管道中执行多个操作。与所有惰性 Dask 集合一样,我们需要调用
compute
来实际评估我们的结果。(take也是拉起计算的一种方式)
API文档:
API — Dask documentationhttps://docs.dask.org/en/latest/bag-api.html#
Dask Bag 应用相关推荐
- 02 Dask源码剖析-Dask的数据模型-Bag
Dask源码剖析是一个专栏,更多章节请点击文章列表查看.后续我会更新更多内容上来. 文章目录 Collection:Bag Bag的创建 从内存序列创建(from_sequence) 从文本文件创建( ...
- python 并行计算库_Python 大规模数据存储与读取、并行计算:Dask库简述
本文转自:https://blog.csdn.net/sinat_26917383/article/details/78044437 数据结构与pandas非常相似,比较容易理解. 原文文档:http ...
- python︱大规模数据存储与读取、并行计算:Dask库简述
数据结构与pandas非常相似,比较容易理解. 原文文档:http://dask.pydata.org/en/latest/index.html github:https://github.com/d ...
- Dask核心功能介绍及与Spark的比较
从谷爱凌身上,我们看到了支撑她走上神坛的4个因素: 优良的基因 衣食无忧的生活 兴趣自由 智力向导 其中基因是基础,也可以说是最重要的.不要小看基因的一点儿优化,哪怕一丁点的改良就可能超越当前地球在世 ...
- 大数据系列14:dask使用简介
anaconda装完了之后会自带dask.中文版文档见https://www.heywhale.com/mw/project/610c8f40fe727700176ae461 Dask 带有四个可用的 ...
- 读书笔记:《Python 和 Dask 数据科学》
文章目录 一. 可扩展计算 数据集规模 调度,扩展,并发和恢复 二. Dask Dask 组件和层次 Dask 入门 三. Dask DataFrame Dask 和 Pandas 数据:读取 数据: ...
- Python大数据分析神器---Dask
对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器. 1.什么是Dask? Pandas和Numpy大家都不陌生了, ...
- python包:Dask介绍
先上官方文档:Dask 搜索相关问题:Stack Overflow with the #dask tag Anaconda默认安装了Dask,因此我们不需要再另外安装Dask.并且linux和wind ...
- Dask简介(python)
安装 pip install dask 高级集合被用来生成任务图,这些任务图可以由单机或集群上的调度器执行. 导包 import numpy as np import pandas as pdimpo ...
最新文章
- mysql 插入表情符号 '\xF0\x9F\x8D\xB0/...' 报错的解决方法
- 利用Python模拟鼠标自动完成MM32-LINK程序下载
- ASP.Net 获取当前时间
- 近20万奖金:天池异常检测大赛来了!
- Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数
- 程序员怎么样保证自己的程序没有BUG
- 48岁的C语言,你知道它背后的历史吗?
- 二叉树 根据前序遍历 中序遍历 写出后序遍历
- Spring安全权限管理(Spring Security的配置使用)
- 开源GIS-01-开源库的编译
- Joint Discriminative and Generative Learning for Person Re-identification论文翻译
- 可汗学院公开课——统计学学习:47-61
- 【PC工具】压缩包密码破解工具,暴力破解压缩包密码,zip密码获取
- [附源码]Python计算机毕业设计Django的小区宠物管理系统
- 车道线分割项目记录-模型构建
- sqlplus导数_GitHub - Erik-Yim/blog: Everything about database,bussiness.(Most for PostgreSQL).
- Docker内时区查询和修改方法
- 什么是SAP ECC企业控制中心系统 ECC简介
- Ubuntu18.04便签工具xpad安装
- 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)