有没有适用于Python和Hadoop的分布式机器学习库?

10
我已经使用亚马逊弹性MapReduce来执行各种标准的机器学习任务。我过去在本地机器学习中广泛使用Python,而且我不懂Java。
据我所知,目前没有成熟的Python分布式机器学习库。另一方面,Java有Apache Mahout和Cloudera的更近期的Oryx
基本上看起来我必须在两个选项之间做出选择。要么费力地并行化自己的算法以与Hadoop流Hadoop的Python包装器之一配合使用,直到存在像样的库,要么跳转到Java,以便我可以使用Mahout/Oryx。编写自己的MapReduce单词计数代码和编写自己的MapReduce SVM之间有着天壤之别!即使有像这个这样的优秀教程的帮助。

我不知道哪种选择更明智,所以我的问题是:

A)是否有我错过的某些有用的Python库?如果没有,您是否知道未来是否有任何开发中的库将有用?

B)如果以上答案是否定的,那么我花费时间跳转到Java是否更好?


请查看:https://dev59.com/Cm445IYBdhLWcg3wg6tm - alexplanation
要求我们推荐或寻找工具、库或喜爱的离线资源的问题,因为它们往往会吸引有主观倾向的答案和垃圾信息,所以在 Stack Overflow 上是不被允许的。相反,应该描述问题以及已经采取的解决方案。 - Martijn Pieters
软件推荐开放时,请前往。 - user
现在,Spark + PySpark + MLLib 是您前进的道路。 - Dan Ciborowski - MSFT
5个回答

10

我不知道有没有Python原生支持在Hadoop上进行机器学习的库,但一个简单的解决方案是使用jpype模块,它可以让你从Python代码内部与Java进行交互。

例如,你可以像这样启动JVM:

from jpype import *

jvm = None

def start_jpype():
    global jvm
    if (jvm is None):
        cpopt="-Djava.class.path={cp}".format(cp=classpath)
        startJVM(jvmlib,"-ea",cpopt)
        jvm="started"

这里有一个非常好的教程,介绍了如何使用Mahout从您的Python代码中使用KMeans聚类


教程链接对我不起作用,它把我带到了一个登录页面。 - Patrick Coulombe

1

我建议在使用EMR时使用Java。

首先,Java是EMR设计的工作方式。如果你要在Windows上玩游戏,你就要用C#,如果你要在apache中创建Web服务,你就要用PHP。当你在EMR中运行MapReduce Hadoop时,你就要用Java。

其次,所有Java工具都可以使用,例如AWS SDK。我经常使用Netbeans、Cygwin(在Windows上)和s3cmd(在cygwin中)快速开发EMR中的MapReduce作业。我使用Netbeans构建我的MR jar,使用cygwin + s3cmd将其复制到我的s3目录中,以便emr运行。然后,我还使用AWS SDK编写一个程序来启动我的EMR集群并运行我的jar。

第三,有许多Hadoop调试工具(通常需要Mac或Linux操作系统),适用于Java。

请参见此处,了解使用maven为hadoop创建新的Netbeans项目。


1

回答问题:

  1. 据我所知,Python拥有丰富的机器学习和MapReduce模块,但没有ML+MR。

  2. 我认为是的,因为作为一个重度程序员,如果你没有涉足那些讨厌(抱歉,不是针对任何人)的J2EE框架,你应该能够很快掌握Java。


0

-2

A) 不

B) 不

你实际想要做的是转向Scala,如果你想做任何硬核机器学习,那么你也要忘记使用Hadoop并转向Spark。 Hadoop是一个MapReduce框架,但是机器学习算法不一定映射到这个数据流结构,因为它们通常是迭代的。这意味着许多机器学习算法将导致大量的MapReduce阶段 - 每个阶段都有读写磁盘的巨大开销。

Spark是一个内存分布式框架,允许数据保留在内存中,从而将速度提高数倍。

现在Scala是最好的语言之一,特别是针对大数据和机器学习。它不是动态类型的,但具有类型推断和隐式转换,并且比Java和Python更简洁。这意味着您可以在Scala中非常快地编写代码,但更重要的是,该代码可读性强且易于维护。

最后,Scala是函数式的,并自然倾向于数学和并行化。这就是为什么所有关于大数据和机器学习的严肃前沿工作都在Scala中进行的原因;例如Scalding、Scoobi、Scrunch和Spark。过时的Python和R代码将成为过去。


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