Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有分布式机器学习库可以将Python与Hadoop结合使用?_Python_Hadoop_Mapreduce_Hadoop Streaming_Elastic Map Reduce - Fatal编程技术网

有没有分布式机器学习库可以将Python与Hadoop结合使用?

有没有分布式机器学习库可以将Python与Hadoop结合使用?,python,hadoop,mapreduce,hadoop-streaming,elastic-map-reduce,Python,Hadoop,Mapreduce,Hadoop Streaming,Elastic Map Reduce,我已经使用Amazon Elastic MapReduce设置了自己,以便执行各种标准的机器学习任务。过去,我在本地机器学习中广泛使用Python,但我不懂Java 据我所知,目前还没有用于分布式机器学习的开发良好的Python库。另一方面,Java已经从Cloudera获得了更多的支持,而且是最近的 从本质上看,我似乎不得不在两种选择中做出选择。我将自己的算法并行化,直到有合适的库存在,或者跳转到Java,这样我就可以使用Mahout/Oryx了。编写自己的MapReduce字数代码和编写自己

我已经使用Amazon Elastic MapReduce设置了自己,以便执行各种标准的机器学习任务。过去,我在本地机器学习中广泛使用Python,但我不懂Java

据我所知,目前还没有用于分布式机器学习的开发良好的Python库。另一方面,Java已经从Cloudera获得了更多的支持,而且是最近的

从本质上看,我似乎不得不在两种选择中做出选择。我将自己的算法并行化,直到有合适的库存在,或者跳转到Java,这样我就可以使用Mahout/Oryx了。编写自己的MapReduce字数代码和编写自己的MapReduce SVM之间有着天壤之别!即使有像这样的优秀教程的帮助

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

A) 有没有我错过的有用的Python库?如果没有,您是否知道在不久的将来是否有有用的开发项目


B) 如果上面的答案是否定的,那么我的时间花在跳槽到Java上会更好吗?

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

回答以下问题:

  • 据我所知,python有大量的机器学习和MapReduce模块,但没有ML+MR

  • 我想说是的,因为你是一个笨重的程序员,如果你不参与那些讨厌的(对不起,无意冒犯)J2EE框架,你应该能够相当快地掌握Java


  • 当您使用EMR时,我建议您使用Java

    首先,很简单,这就是它设计的工作方式。如果你打算在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

    第三,Java有许多Hadoop调试工具(通常需要mac或linux操作系统才能工作)


    请参阅,了解如何使用maven for hadoop创建新的Netbeans项目。

    这篇博客文章对使用hadoop的python框架进行了相当全面的回顾:

    包括:

    Hadoop流媒体

    mrjob

    小飞象

    哈多比

    pydoop

    该示例提供了一个使用python和hadoop的并行化ML的工作示例:

    A)没有

    B) 没有

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

    Spark是一个内存内分布式框架,它允许数据以数量级的速度保留在内存中

    现在Scala是世界上最好的语言,特别是对于大数据和ML来说。它不是动态类型的,但有类型推断和隐式转换,而且比Java和Python要简洁得多。这意味着您可以在Scala中非常快速地编写代码,而且,该代码是可读的和可维护的


    最后,Scala是功能性的,自然适合于数学和并行化。这就是为什么所有关于大数据和ML的严肃前沿工作都是在Scala中完成的;e、 g.烫伤、Scoobi、Scrunch和Spark。粗制滥造的Python&R代码将成为过去。

    检查:要求我们推荐或查找工具、库或喜爱的非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。取而代之的是,以及迄今为止为解决此问题所做的工作。继续到它将在何时打开。Spark+PySpark+MLLib是您现在的方式链接到教程对我不起作用,将我带到登录页面。