在 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