如果这个问题措辞不当,我深表歉意:我正在进行一个大型机器学习项目,我不喜欢用 Java 编程。我喜欢用 Python 编写程序。我听说过关于猪的好消息。我想知道是否有人可以向我澄清 Pig 与 Python 结合用于数学相关工作的用途。另外,如果我要编写“流式 python 代码”,Jython 会出现吗?如果它出现在图片中会更有效吗?
谢谢
PS:出于几个原因,我不喜欢按原样使用 Mahout 的代码。我可能想使用他们的一些数据结构:知道这是否可行会很有用。
如果这个问题措辞不当,我深表歉意:我正在进行一个大型机器学习项目,我不喜欢用 Java 编程。我喜欢用 Python 编写程序。我听说过关于猪的好消息。我想知道是否有人可以向我澄清 Pig 与 Python 结合用于数学相关工作的用途。另外,如果我要编写“流式 python 代码”,Jython 会出现吗?如果它出现在图片中会更有效吗?
谢谢
PS:出于几个原因,我不喜欢按原样使用 Mahout 的代码。我可能想使用他们的一些数据结构:知道这是否可行会很有用。
将 Python 与 Hadoop 一起使用的另一个选择是PyCascading。您可以在 Python/Jython 中仅编写 UDF 或使用流式传输,而不是将整个作业放在一起,在定义数据处理管道的同一脚本中使用 Python 函数作为“UDF”。Jython 用作 Python 解释器,流操作的 MapReduce 框架是Cascading。连接、分组等在本质上与 Pig 类似,因此如果您已经了解 Pig,也就不足为奇了。
字数统计示例如下所示:
@map(produces=['word'])
def split_words(tuple):
# This is called for each line of text
for word in tuple.get(1).split():
yield [word]
def main():
flow = Flow()
input = flow.source(Hfs(TextLine(), 'input.txt'))
output = flow.tsv_sink('output')
# This is the processing pipeline
input | split_words | GroupBy('word') | Count() | output
flow.run()
当您在 pig中使用流式传输时,您使用哪种语言并不重要......它所做的只是在 shell 中执行一个命令(如通过 bash)。您可以使用 Python,就像您可以使用grep
C 程序一样。
您现在可以在 Python 中本地定义 Pig UDF。这些 UDF 在执行时将通过 Jython 调用。
Programming Pig书中讨论了使用 UDF。一般来说,这本书是不可或缺的。在最近的一个项目中,我们使用了 Python UDF,并且偶尔会遇到浮点数与双精度数不匹配的问题,因此请注意。我的印象是,对 Python UDF 的支持可能不如对 Java UDF 的支持那么可靠,但总的来说,它运行得很好。