10

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

据我所知,没有用于分布式机器学习的开发良好的 Python 库。另一方面,Java 有Apache Mahout和来自 Cloudera的较新的Oryx 。

从本质上讲,我似乎必须在两个选项之间做出选择。通过并行化我自己的算法以与Hadoop 流或 Hadoop 的Python 包装器之一一起使用,直到存在体面的库或跳转到 Java,以便我可以使用 Mahout/Oryx。编写自己的 MapReduce 字数统计代码和编写自己的 MapReduce SVM 之间有天壤之别!即使在像这样的优秀教程的帮助下。

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

A)我错过了一些有用的 Python 库吗?如果没有,您知道是否有任何在不久的将来有用的开发中?

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

4

5 回答 5

10

I do not know of any library that could be used natively in Python for machine learning on Hadoop, but an easy solution would be to use the jpype module, which basically allows you to interact with Java from within your Python code.

You can for example start a JVM like this:

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"

There is a very good tutorial on the topic here, which explains you how to use KMeans clustering from your Python code using Mahout.

于 2013-01-09T19:10:47.133 回答
1

Answer to the questions:

  1. To my knowledge, no, python has an extensive collection of machine learning and map-reduce modules but not ML+MR

  2. I would say yes, since you are a heavy programmer you should be able to catch with Java fairly fast if you are not involved with those nasty(sorry no offense) J2EE frameworks

于 2014-01-21T19:27:53.643 回答
1

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

首先,很简单,它的设计工作方式。如果你要在 Windows 上玩,你用 C# 编写,如果你用 apache 做一个 web 服务,你用 PHP。在 EMR 中运行 MapReduce Hadoop 时,您使用的是 Java。

其次,Java 中的所有工具都适合您,例如 AWS 开发工具包。在 Netbeans、Cygwin(在 Windows 上)和 s3cmd(在 cygwin 中)的帮助下,我定期在 EMR 中快速开发 MapReduce 作业。我使用 netbeans 构建我的 MR jar,并使用 cygwin + s3cmd 将其复制到我的 s3 目录以运行 emr。然后,我还使用 AWS SDK 编写了一个程序,以使用我的配置启动我的 EMR 集群并运行我的 jar。

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

请参阅此处以使用 Maven 为 hadoop 创建一个新的 Netbeans 项目。

于 2014-01-23T00:22:11.420 回答
0

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

http://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/

包含:

Hadoop 流式传输

先生工作

小飞象

hadoopy

pydoop

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

http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/

于 2014-01-23T07:58:11.343 回答
-2

A) 没有

B) 没有

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

Spark 是一个内存分布式框架,它允许数据保持在内存中,速度提高了几个数量级。

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

最后,Scala 是函数式的,并且很自然地适用于数学和并行化。这就是为什么所有重要的大数据和机器学习前沿工作都在 Scala 中完成;例如 Scalding、Scoobi、Scunch 和 Spark。粗鲁的 Python 和 R 代码将成为过去。

于 2014-01-23T10:25:21.797 回答