在什么情况下我可以使用Dask而不是Apache Spark?

102
我目前正在使用Pandas和Spark进行数据分析。我发现Dask提供了并行化的NumPy数组和Pandas DataFrame。
Pandas在Python中进行数据分析易于上手且直观。但是,由于系统内存有限,处理多个较大的数据框在Pandas中会遇到困难。
简单回答:
Apache Spark是一个全面的框架,结合了分布式计算、SQL查询、机器学习等功能,运行在JVM上,并通常与其他大数据框架(如Hadoop)一起部署。…通常情况下,Dask比Spark更小、更轻量级。
我从http://dask.pydata.org/en/latest/spark.html了解到以下细节。
  • Dask是轻量级的。
  • Dask通常在单台机器上使用,但也可以在分布式集群上良好运行。
  • Dask提供并行数组、数据框架、机器学习和自定义算法。
  • 对于Python用户,Dask具有优势,因为它本身是一个Python库,所以当出现问题时,序列化和调试更加顺畅。
  • Dask放弃了高层次的理解,允许用户表达更复杂的并行算法。
  • Dask更轻量级,更容易集成到现有代码和硬件中。
  • 如果您想要一个能做所有事情的单一项目,并且已经在Big Data硬件上,则Spark是一个安全的选择。
  • Spark通常在小型到中型集群上使用,但也可以在单台机器上良好运行。

我从下面的链接中更多地了解了Dask https://www.continuum.io/blog/developer-blog/high-performance-hadoop-anaconda-and-dask-your-cluster

如果你在使用Python的Pandas、NumPy或其他计算时,遇到了内存问题、存储限制或单台机器的CPU边界,Dask可以帮助你在单台机器上扩展所有核心,或在整个集群的所有核心和内存上进行扩展。Dask在单台机器上很好地运行,可以利用笔记本电脑上的所有核心并处理大于内存的数据。它可以在数百个节点的集群上弹性地扩展。Dask可以从Python本地工作,处理不同格式和存储系统中的数据,包括Hadoop分布式文件系统(HDFS)和Amazon S3。Anaconda和Dask可以与您现有的企业级Hadoop发行版一起使用,包括Cloudera CDH和Hortonworks HDP。

http://dask.pydata.org/en/latest/dataframe-overview.html

限制

Dask.DataFrame没有实现完整的Pandas接口。期望此功能的用户会感到失望。特别是,dask.dataframe具有以下限制:

  1. 从未排序的列设置新索引很昂贵
  2. 许多操作(例如groupby-apply和在未排序的列上进行连接)需要设置索引,如上所述,这是很昂贵的
  3. Pandas API非常庞大。Dask.dataframe不尝试实现许多pandas功能或任何更奇特的数据结构,如NDFrames。

感谢Dask开发人员。它似乎是非常有前途的技术。

总体而言,我可以理解Dask比Spark更简单易用。Dask与Pandas一样灵活,但具有更多的计算能力,可以使用更多的CPU并行计算。

我了解以上关于Dask的所有事实。

那么,Dask可以处理多少数据(以TB为单位)?


1
仅考虑数据大小并不足以选择最佳的并行工具/策略。算法如何处理数据也需要考虑在内。我尚未尝试过两者,但可能会在单机上(例如笔记本电脑或个人电脑)尝试使用dask。当需要在多节点集群上运行时,将考虑部署到spark上。因为使用spark附带的框架来学习和调整每个组件似乎非常复杂。 - ReneWang
1
你可以在这里找到回复:https://medium.com/datadriveninvestor/pandas-dask-or-pyspark-what-should-you-choose-for-your-dataset-c0f67e1b1d36 - tom
1个回答

51

您可能希望阅读 Dask与Apache Spark的比较

Apache Spark是一个全面的框架,结合了分布式计算、SQL查询、机器学习等功能,运行在JVM上,并常与其他大数据框架(如Hadoop)一起使用。它最初针对数据工程和商业分析中普遍存在的大规模数据摄取和查询进行了优化,但现在已经扩展到了更广泛的应用领域。Spark通常用于小到中型集群,也能在单台机器上运行良好。

Dask是一个并行编程库,与Numeric Python生态系统结合使用,提供并行数组、数据框架、机器学习和自定义算法。它基于Python和基础的C/Fortran堆栈。 Dask最初设计为与其他库相结合以实现并行性,特别是用于数值计算和高级分析,但现在已经扩展到了更广泛的应用领域。Dask通常在单台计算机上使用,但也能在分布式集群上运行良好。

通常情况下,Dask比Spark更小、更轻量级。这意味着它具有较少的功能,而是旨在与其他库特别是Numeric Python生态系统中的库一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接