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

时间:2016-08-10 20:11:45

标签: python pandas apache-spark dask bigdata

我目前正在使用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提供并行数组,数据帧,机器学习和自定义算法
  • Dask对Python用户有优势,因为它本身就是一个Python库,所以当出现问题时进行序列化和调试会更顺利。
  • Dask放弃了高级别的理解,允许用户表达更复杂的并行算法。
  • Dask重量更轻,更易于集成到现有代码和硬件中。
  • 如果你想要一个能完成所有事情并且你已经在大数据硬件上的项目,那么Spark是一个安全的选择
  • Spark通常用于中小型群集,但也可以在一台计算机上运行良好。

我从以下链接了解有关Dask的更多信息 https://www.continuum.io/blog/developer-blog/high-performance-hadoop-anaconda-and-dask-your-cluster

  • 如果您在使用Pandas,NumPy或其他使用Python的计算时遇到内存问题,存储限制或单个计算机上的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和join on unsorted columns,需要设置索引,如上所述,这是昂贵的
  3. Pandas API非常庞大。 Dask.dataframe不会尝试实现许多pandas功能或任何更奇特的数据结构,如NDFrames
  4. 感谢Dask开发人员。这似乎是非常有前途的技术。

    总的来说,我可以理解Dask比spark更容易使用。 Dask与Pandas一样灵活,具有更多的功能,可以与更多的CPU并行计算。

    我理解有关Dask的所有上述事实。

    那么,使用Dask大致可以处理多少数据量(以TB为单位)?

1 个答案:

答案 0 :(得分:21)

您可能需要阅读Dask comparison to Apache Spark

  

Apache Spark是一个包含分布式的全包框架   计算,SQL查询,机器学习等等   JVM通常与其他大数据框架共同部署   Hadoop的。它最初针对批量数据摄取和查询进行了优化   在数据工程和业务分析中很常见但从那以后   扩大了。 Spark通常用于中小型   群集,但也可以在一台机器上运行良好。

     

Dask是一个与Numeric结合的并行编程库   Python生态系统提供并行数组,数据帧,机器   学习和自定义算法。它基于Python和   基础C / Fortran堆栈。 Dask最初是为了设计的   补充其他具有并行性的库,特别是对于数字   计算和高级分析,但后来扩大了。达斯是   通常在一台机器上使用,但也可以在一台机器上运行良好   分布式集群。

     

通常,Dask比Spark更小,重量更轻。这意味着   它具有较少的功能,而是打算用于   与其他库结合使用,尤其是数字库中的库   Python生态系统。