在 CPython 中嵌入 Pig

Posted

技术标签:

【中文标题】在 CPython 中嵌入 Pig【英文标题】:Embedding Pig in CPython 【发布时间】:2012-08-22 16:32:27 【问题描述】:

有没有人知道在 cpython 脚本中嵌入 pig 的方法,类似于 RDBMS 可用的方法?我搜索了,但没有运气。

我宁愿不使用 Jython,因为我正在尝试使用 jython 中不可用的各种 cpython 库来处理数据。

【问题讨论】:

看来您可以使用 pig techblug.wordpress.com/2011/07/29/… 运行带有 pig 命令的 python 脚本 @NickODell,感谢您的指点。不幸的是,这是使用 Jython,它不允许我使用 cpython 库(scipy 等)。 【参考方案1】:

最近在 Pig 0.12 中添加了对 CPython 的支持:http://blog.mortardata.com/post/62334142398/hadoop-python-pig-trunk

【讨论】:

【参考方案2】:

Jython 似乎是最受欢迎的选项,例如 here、here 和 here,但您可能会发现 this 线程很有帮助,尽管它也专注于 Jython。似乎通过 Python 对 UDF 的关注绝对是在 Jython 上,所以除非您绝对需要 CPython 库,否则您可以考虑硬着头皮继续使用它。另一件需要考虑的事情是,Jython 2.7 版 (source) 已经成熟,尽管这可能不符合您的需求。

【讨论】:

【参考方案3】:

如果“类似于 RDBMS 可用的”是指 API,则可以使用子流程构建对象模型。我过去使用过类似以下的东西。

import subprocess
from subprocess import Popen, PIPE

def execute(command):
    print command + "\n"
    p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
    stdout, stderr = p.communicate()
    print stdout
    return p.returncode

command = "pig.9 -p input=" + input + "/* -p output=" + output + " -f my.pig"
execute(command)

【讨论】:

以上是关于在 CPython 中嵌入 Pig的主要内容,如果未能解决你的问题,请参考以下文章

_ctypes.cpython-39-x86_64-linux-gnu.so:未定义符号:使用 dlopen 加载的嵌入式 Python 中的 PyFloat_Type

为啥 CPython 3.4.3 不能导入“_socket”模块?

在网站中嵌入 python

mac编译Cpython

Cpython翻译 ing

为啥对 Python 值的引用(即函数参数)存储在 CPython 的堆栈(帧)中?