Dask Python2025年03月17日 | 阅读 9 分钟 在机器学习和数据科学的现代世界中,使用独特的 Python 工具出奇地容易。这些包包括 scikit-learn、NumPy 或 Pandas,它们无法在内存使用或处理时间方面适当地扩展数据。 转向分布式计算工具(传统上是 Apache Spark)是预料之中的。但是,这可能意味着要为一个全新的系统重新调整工作流程,在熟悉的 Python 生态系统和不同的 Java 虚拟机 (JVM) 世界之间导航,并显著增加开发工作流程的复杂性。 Dask 库用于将分布式计算能力与 Python 开发的灵活性相结合,实现数据科学,并与 Python 的标准数据工具无缝集成。 理解分布式计算让我们考虑一个场景:我们有一个数据集,可能是一组非常大的文本文件,无法完全放入机器内存中。我们可以利用 Python 中的文件流和其他生成器工具来迭代数据集,而无需将其加载到内存中。但是,会引发另一个问题,因为程序仍然在单个线程上工作,即使在内存管理之后,这最终也会限制速度。 因此,Python 提供了一个称为全局解释器锁(换句话说,大多数开发人员使用 CPython)的安全功能,用于在 Python 中编写并行代码,但这可能有点棘手。 因此,有几种好的解决方案可用。这些解决方案包括使用 GIL 之外的低级工具(例如 NumPy 在已编译而非 Python 代码中执行多线程繁重工作),或利用 Python 代码包(例如 multiprocessing 或 joblib)中的多个进程/线程。 然而,尝试并行化以加速代码变得困难,结果是,即使过程正确完成,代码的可读性也较差,需要开发人员完全重新架构该过程,但系统上的资源可能有限。 对于像上面这样真正大规模的困难,分布式计算可以被认为是一个主要的关键。在分布式系统中,工作被分配到多台独立的 worker 机器上,而不是仅仅尝试在单个设备上使用多个线程工作。 这些自主的 worker 机器在其处理器上以及在其磁盘空间或内存中处理数据集的块。这些 worker 机器只通过相对简单的消息传递相互通信或与中央调度器通信,而不是像多线程代码那样共享磁盘空间和内存。 分布式计算中的挑战
分布式计算系统还允许开发人员在非常大的数据集上扩展代码,以便在任意数量的 worker 上并行运行,以换取设置集中式调度器并使 worker 彼此完全分离的设计复杂性。 分布式计算的优势
让我们了解 Dask 是什么以及它是如何工作的。 理解 DaskDask 是一个开源的 Python 库,专为并行计算和处理大型数据集而设计。它使用户能够跨多个核心或机器无缝地扩展计算,从而能够处理不适合内存的数据。Dask 与流行的 Python 库(如 NumPy、pandas 和 scikit-learn)很好地集成,允许用户以最少的代码更改并行化现有工作流程。它对于数据处理、机器学习以及其他需要高效处理大规模计算的任务特别有用。 Dask 通过其低级调度器和高级集合提供不同的实用程序。
Dask 的用例提供了几个示例工作流,其中 Dask 可以被视为完美的选择。 Dask 调度器类型Dask 主要提供两种类型的调度器:单机调度器和分布式调度器。
建议在大多数情况下使用分布式调度器,因为它提供了一个包含多个表格和实时信息绘图的方便且交互式的仪表板。默认情况下,它在初始化集群时可在端口 8787 上使用。 在进入安装部分之前,让我们了解 Dask 集群。 理解 Dask 集群集群是一个分布式或并行处理系统,包含一组相互连接的独立计算机,它们共同作为一个单一的集成计算资源协同工作。集群中的节点可以被视为一个单处理器或多处理器系统,例如 个人计算机 (PC)、工作站,甚至是 SMP。 ![]() 在集群世界中,有各种体系结构形式可用,以决定我们如何在计算机之间精确地分配工作。让我们了解 Dask 中集群的组织方式。 Dask 网络由三部分组成
客户端将向调度器发送描述计算代码类型的请求。一旦收到请求,调度器就会在 workers 之间分配工作以满足请求,最后 workers 完成计算工作。 ![]() 正如我们所观察到的,Dask 将这些大量的数据计算分解为多个小的计算。 值得注意的是,Dask 也可以部署在各种基于集群的技术上,例如
如何安装 Dask Python我们可以使用 Anaconda 或 pip 来安装 Dask。 通过 Anaconda 安装 Dask 的语法如下 或 我们可以简单地在终端或命令提示符中使用以下命令通过 pip 安装 Dask 成功安装 Dask 库后,让我们了解 Dask 接口。 理解 Dask 接口Dask 提供不同的用户界面。这些界面包含一套不同的并行算法,用于分布式计算。以下是一些重要的用户界面,适用于寻求扩展 NumPy、Pandas 和 scikit-learn 的数据科学从业者。
Dask 数组 Dask 中的数组通过分块算法提供大于内存的、并行的、n 维数组。换句话说,它是 NumPy 数组的分布式形式。 这是一张图片,可以帮助我们了解 Dask 数组的外观 ![]() 正如我们所观察到的,多个 NumPy 数组被组织成网格以形成 Dask 数组。当我们创建一个 Dask 数组时,我们可以规定块的大小,它定义了 NumPy 数组的大小。例如,如果一个数组中有十个值,并且将块大小设置为五,它将返回两个 NumPy 数组,每个数组包含五个值。 Dask 数组提供以下一些重要功能
以下是一些使用 Dask 创建数组的简单案例。 示例 1:使用 Dask 数组创建随机数组 输出 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] ((5, 5, 5, 1),) 说明 在上面的程序中,我们从 dask 库中导入了 array 模块,并使用 arange() 方法创建了一个包含 16 个值的数组,并分别将块大小定义为 5。然后我们使用 compute() 方法打印数组。我们还使用 chunks 函数检查了每个块的大小。结果,我们得到了结果数组,我们还可以观察到数组分布在四个块中,其中第一个、第二个和第三个块各包含五个值,第四个块只有一个值。 示例 2:将 NumPy 数组转换为 Dask 数组 输出 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] 说明 在上面的示例中,我们导入了 NumPy 库和 dask 库的 array 模块。然后我们使用 arange() 方法创建了一个包含 15 个值的 NumPy 数组作为 first_array。然后我们使用 from_array() 方法将 first_array 转换为 Dask 数组作为 second_array,分别将块定义为 5。然后我们使用 compute() 函数打印数组。 此外,Dask 数组支持 NumPy 数组的大多数函数。例如,我们可以使用 mean()、sum() 等。 示例 3:计算前 100 个数字的和 输出 4950 说明 在上面的示例中,我们导入了 NumPy 库和 Dask 库的 array 模块,并使用 arange 函数创建了一个从 1 到 100 的 NumPy 数组。然后我们将 NumPy 数组转换为 Dask 数组,并使用 sum() 函数打印 Dask 数组值的和。结果,我们得到了前 100 个数字的总和。 我们已经讨论了 Dask Python 的基本介绍,但仍有一些重要概念有待讨论。本教程的其余部分将在第二部分中介绍。 |
如何在 Python 中设计一个 Hashset?我们知道 HashSet 是 Java 中一个著名的类。HashSet 用于使用哈希表存储值。在本教程中,我们将介绍 Python 中的 HashSet。我们还将学习如何设计...
阅读 8 分钟
随机森林是一种流行且高效的集成机器学习方法。对于结构化(表格)数据集,例如电子表格或关系数据库表中的数据集,此算法通常用于通过分类和回归进行预测建模。时间序列数据必须首先转换...
阅读 8 分钟
Paramiko 是一个基于 Python (3.4+, 2.7) 的 SSHv2 协议实现,提供客户端和服务器功能。它为无可争议的高级 SSH 库 Fabric 奠定了基础,我们建议您将其用于常见的客户端用例,例如运行远程 shell 命令或传输...
阅读9分钟
散点图是一种数据可视化方法,用于显示两个数值变量之间的关系。在 Python 中,有一个名为 DataFrame 的类,可以使用 pandas 绘制散点图,此类的成员称为 plot。通过使用...
阅读 6 分钟
Python 中的 csv 模块是一个内置库,提供读取和写入 CSV(逗号分隔值)格式数据的功能。此模块使得使用 CSV 数据变得容易,无论是从文件读取数据,将数据写入文件,还是...
5 分钟阅读
两个字符串之间的编辑距离衡量将一个字符串转换为另一个字符串所需的最小操作数。可以执行各种操作,包括插入、删除和替换单个字符。编辑距离也称为...
阅读 8 分钟
简介:在生物信息学和计算生物学不断发展的领域中,研究人员经常发现自己要处理各种复杂的数据集。Bioconductor 是一个广泛使用的开源软件项目,提供了一套工具和库,以方便高通量基因组数据的分析和解释。虽然...
阅读 4 分钟
Kivy 是 Python 中一个独立于平台的图形用户界面工具。因为它兼容 Android、iOS、Linux 和 Windows。它通常用于 Android 应用程序的开发,但这并不妨碍它在桌面程序中的应用。屏幕管理器小部件:一个名为...的小部件
阅读 8 分钟
在本教程中,我们将使用 Python 编程语言学习 KMP 算法。该算法主要用于以 O(n) 复杂度搜索模式或子字符串。该算法可能会在技术面试中被问到,以测试开发人员的能力。KMP 算法 KMP 代表 Knuth-Morris-Prat...
阅读 2 分钟
在 pandas 中,一种称为 series 的列表类型可以包含数字、字符串、双精度和其他类型的数据。相反,Pandas Series 返回一个对象作为列表,其中 n 是 series 数据的长度,索引从 0 到 n....
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India