我在 Scala 中找到了许多用于数据科学的库和工具,我想知道哪个有更多的采用,哪个正在以更快的速度获得采用,以及这种情况的程度。基本上,我应该赌哪一个(如果有的话)。
我发现的一些工具是(不分先后):
- 烫
- 微风
- 火花
- 鞍
- 水
- 尖塔
- 马豪
- Hadoop
- MongoDB
如果我需要更具体地回答问题:我目前对集群和大数据并不是特别感兴趣,但我对用于信息集成和预测分析的大量数据(高达 100 GB)感兴趣。
我在 Scala 中找到了许多用于数据科学的库和工具,我想知道哪个有更多的采用,哪个正在以更快的速度获得采用,以及这种情况的程度。基本上,我应该赌哪一个(如果有的话)。
我发现的一些工具是(不分先后):
如果我需要更具体地回答问题:我目前对集群和大数据并不是特别感兴趣,但我对用于信息集成和预测分析的大量数据(高达 100 GB)感兴趣。
不确定是否有人使用过所有这些工具,所以我将与其中一些人分享我的经验,并让其他人与其他人分享他们的经验。
MongoDB解决了涉及异构和嵌套对象的问题,而数据挖掘主要处理简单的表格数据。MongoDB 对这种类型的数据既不快,也不提供任何高级分析工具(如果你知道的话,请纠正我)。所以我能想到Mongo在数据挖掘方面的应用很少。
Hadoop是一个大型生态系统,包含数十种不同的工具。我假设您指的是核心 Hadoop 功能 - HDFS 和 MapReduce。HDFS 为存储大量数据提供了灵活的方式,而 MapReduce 为处理它们提供了基础。它在处理多 TB 数据集方面具有明显的优势,但也有明显的缺点。特别是,由于 MapReduce 任务期间的密集磁盘 IO(这会大大减慢计算速度),这对于交互式开发、迭代算法和处理不太大的数据集来说是非常糟糕的。有关更多详细信息,请参阅我之前的回答。
Hadoop 中的许多算法需要具有复杂数据流的多个 MapReduce 作业。这是Scalding变得闪亮的地方。Scalding(以及底层 Java 的Cascading)提供了更简单的 API,但目前使用相同的 MapReduce 作为其运行时,因此存在所有相同的问题。
Spark正好解决了这些问题。它放弃了 Hadoop 的 MapReduce,并提供了基于分布式内存集合和延迟评估的全新计算框架。它的 API 有点类似于 Scalding 的 API,去掉了所有的 MR 复杂性,所以很容易上手。Spark 也是该列表中第一个附带数据挖掘库 - MLlib 的。
但 Spark 并没有重新发明基本线性代数之类的东西。为此,它使用Breeze。在我看来,Breeze 在质量上远不及 SciPy、Octave 或 Julia 等科学软件包,但对于大多数实际用例来说仍然足够好。
Mahout依赖于 Hadoop 的 MapReduce,因此对于迭代算法来说很糟糕。Spire和Saddle看起来很可爱,可能也有他们的利基市场,但似乎不如 Breeze 出名。我找不到太多关于H2O的信息,所以它在这里看起来不像是一个大玩家(欢迎使用它的人发表评论)。
一些快速总结。Spark 似乎是用于大规模数据处理的最简单、最灵活和发展最快的项目。它促进了许多新项目(例如 Shark 或 Spark SQL)并渗透到现有项目(包括Cascading和Mahout)。Spark 知道如何利用 HDFS API,因此可以轻松扩展到 TB 级数据。对于不想打扰集群设置的数据挖掘降档者来说,总是有纯粹的 Breeze。