• 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 应用相关推荐

  1. 02 Dask源码剖析-Dask的数据模型-Bag

    Dask源码剖析是一个专栏,更多章节请点击文章列表查看.后续我会更新更多内容上来. 文章目录 Collection:Bag Bag的创建 从内存序列创建(from_sequence) 从文本文件创建( ...

  2. python 并行计算库_Python 大规模数据存储与读取、并行计算:Dask库简述

    本文转自:https://blog.csdn.net/sinat_26917383/article/details/78044437 数据结构与pandas非常相似,比较容易理解. 原文文档:http ...

  3. python︱大规模数据存储与读取、并行计算:Dask库简述

    数据结构与pandas非常相似,比较容易理解. 原文文档:http://dask.pydata.org/en/latest/index.html github:https://github.com/d ...

  4. Dask核心功能介绍及与Spark的比较

    从谷爱凌身上,我们看到了支撑她走上神坛的4个因素: 优良的基因 衣食无忧的生活 兴趣自由 智力向导 其中基因是基础,也可以说是最重要的.不要小看基因的一点儿优化,哪怕一丁点的改良就可能超越当前地球在世 ...

  5. 大数据系列14:dask使用简介

    anaconda装完了之后会自带dask.中文版文档见https://www.heywhale.com/mw/project/610c8f40fe727700176ae461 Dask 带有四个可用的 ...

  6. 读书笔记:《Python 和 Dask 数据科学》

    文章目录 一. 可扩展计算 数据集规模 调度,扩展,并发和恢复 二. Dask Dask 组件和层次 Dask 入门 三. Dask DataFrame Dask 和 Pandas 数据:读取 数据: ...

  7. Python大数据分析神器---Dask

    对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器. 1.什么是Dask? Pandas和Numpy大家都不陌生了, ...

  8. python包:Dask介绍

    先上官方文档:Dask 搜索相关问题:Stack Overflow with the #dask tag Anaconda默认安装了Dask,因此我们不需要再另外安装Dask.并且linux和wind ...

  9. Dask简介(python)

    安装 pip install dask 高级集合被用来生成任务图,这些任务图可以由单机或集群上的调度器执行. 导包 import numpy as np import pandas as pdimpo ...

最新文章

  1. mysql 插入表情符号 '\xF0\x9F\x8D\xB0/...' 报错的解决方法
  2. 利用Python模拟鼠标自动完成MM32-LINK程序下载
  3. ASP.Net 获取当前时间
  4. 近20万奖金:天池异常检测大赛来了!
  5. Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数
  6. 程序员怎么样保证自己的程序没有BUG
  7. 48岁的C语言,你知道它背后的历史吗?
  8. 二叉树 根据前序遍历 中序遍历 写出后序遍历
  9. Spring安全权限管理(Spring Security的配置使用)
  10. 开源GIS-01-开源库的编译
  11. Joint Discriminative and Generative Learning for Person Re-identification论文翻译
  12. 可汗学院公开课——统计学学习:47-61
  13. 【PC工具】压缩包密码破解工具,暴力破解压缩包密码,zip密码获取
  14. [附源码]Python计算机毕业设计Django的小区宠物管理系统
  15. 车道线分割项目记录-模型构建
  16. sqlplus导数_GitHub - Erik-Yim/blog: Everything about database,bussiness.(Most for PostgreSQL).
  17. Docker内时区查询和修改方法
  18. 什么是SAP ECC企业控制中心系统 ECC简介
  19. Ubuntu18.04便签工具xpad安装
  20. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)

热门文章

  1. Redis事务实现原理
  2. 深圳唐三彩非遗艺术馆开展“探索跨界融合,推动非遗创新”主题沙龙
  3. OpenCV实战(14)——图像线条提取
  4. 恐惧让人止步,痛苦催人奋进
  5. python long类型_python 数据类型
  6. python接口自动化整体设计框架(基础-operate_yaml模块)四
  7. 商会是很多做生意的老板最喜欢加入的组织
  8. Java编程——输出1000以内的素数(质数)
  9. 多帧点云数据拼接合并_点云拼接注册
  10. Android 抖音爆红的口红挑战爬坑总结