有没有分布式的机器学习库可以将python与hadoop结合使用?

zf2sa74q  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(474)

**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

6年前关门了。
改进这个问题
为了完成各种标准的机器学习任务,我用amazon弹性mapreduce建立了自己。在过去,我在本地机器学习中广泛使用python,但我不懂java。
据我所知,目前还没有为分布式机器学习开发良好的python库。另一方面,java有apachemahout和cloudera最近的oryx。
从本质上说,我似乎必须在两种选择中做出选择。我将自己的算法与hadoop流媒体或用于hadoop的python Package 器进行并行化,直到有合适的库存在,或者跳转到java,这样我就可以使用mahout/oryx了。编写自己的mapreduce字数代码和编写自己的mapreduce svm之间有着天壤之别!即使有这么好的教程的帮助。
我不知道哪个选择更明智,所以我的问题是:
a) 有没有我错过的有用的python库?如果没有,你知道在不久的将来有没有有用的开发项目?
b) 如果上面的答案是否定的,那么我的时间花在跳槽到java上会更好吗?

zengzsys

zengzsys1#

a) 没有
b) 没有
实际上,你想做的是跳转到scala,如果你想做任何核心的ml,那么你还想忘记使用hadoop和跳转到spark。hadoop是一个mapreduce框架,但是ml算法不一定Map到这个数据流结构,因为它们通常是迭代的。这意味着许多ml算法将导致大量的mapreduce阶段—每个阶段都有读写磁盘的巨大开销。
spark是一个内存分布式框架,它允许数据以数量级的速度留在内存中。
现在scala是世界上最好的语言,特别是对于大数据和ml来说,它不是动态类型化的,但是有类型推断和隐式转换,而且它比java和python更简洁。这意味着您可以在scala中非常快速地编写代码,但是,该代码是可读和可维护的。
最后,scala是函数式的,并且自然地适合于数学和并行化。这就是为什么所有针对大数据和ml的前沿工作都是在scala中完成的;e、 g.烫伤、刮痧、扭伤和Spark。简陋的python&r代码将成为过去。

vsdwdz23

vsdwdz232#

我不知道有哪个库可以在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集群。

d6kp6zgx

d6kp6zgx3#

回答问题:
据我所知,python拥有大量的机器学习和map-reduce模块,但没有ml+mr
我想说是的,因为你是一个沉重的程序员,你应该能够赶上java相当快,如果你不涉及那些讨厌的(抱歉没有冒犯)j2ee框架

qpgpyjmq

qpgpyjmq4#

这篇博文对使用hadoop的python框架进行了相当全面的回顾:
http://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/
包括:
hadoop流媒体
mrjob先生
小飞象
哈多比
侏儒
这个例子提供了一个使用python和hadoop的并行化ml的工作示例:
http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/

gcmastyq

gcmastyq5#

当您使用emr时,我建议您使用java。
首先,也是简单的,这是它的设计工作方式。如果你打算在windows下玩,你就用c#写,如果你用apache做web服务,你就用php。在emr中运行mapreduce hadoop时,使用java。
第二,所有的工具都在java中,比如awsdk。在netbeans、cygwin(在windows上)和s3cmd(在cygwin中)的帮助下,我定期在emr中快速开发mapreduce作业。我使用netbeans构建mr jar,并使用cygwin+s3cmd将其复制到要运行的s3目录beemr。然后,我还使用awssdk编写了一个程序,用我的配置启动emr集群并运行jar。
第三,有许多针对java的hadoop调试工具(通常需要mac或linux操作系统才能工作)
请参见这里,了解如何使用maven for hadoop创建一个新的netbeans项目。

相关问题