Pig 中 UDF 中 Jython 的限制

Posted

技术标签:

【中文标题】Pig 中 UDF 中 Jython 的限制【英文标题】:Limitation of Jython in the context of UDF in Pig 【发布时间】:2014-12-27 17:24:41 【问题描述】:

如果有人可以在 Pig 中的 UDF 上下文中解释 Jython 的局限性,那就太好了。以下是关键问题:

它可以在 Hadoop 1.x 和 YARN 中运行吗? 是否支持 Python 3.4?来自python UDF version with Jython/Pig,我想这不太可能,但该帖子已有一年多的历史了。 在支持的模块方面是否有任何限制?

基本上我想看看使用 Jython 是否有意义(最好在 Python 3 中)

谢谢!

【问题讨论】:

【参考方案1】:

Here 是常见问题解答中的链接。我无法回答有关 Hadoop 或纱线的问题。

Jython 不支持 Python 3。最新版本支持 python 2.7.0。

python 的许多科学模块都是用 C 或 Cython 编写的。例如,SciPy 使用 fortran 项目 BLAS 进行线性代数。编写的 C 代码构成了 Python 和 BLAS 之间的桥梁。 Java 字节码与本机二进制不兼容。

有一个项目 JyNI。位于here。它试图弥合差距。不知道成熟到什么程度。

根据 jython 的网页,他们正在尝试使 jython 与 python 扩展 api 兼容。截至目前,还没有正式发布,我认为它仍处于 alpha 阶段。

自 Java 8 起,Java 无法将本机代码集成到 Java 程序中。我认为他们正在做一些骇人听闻的事情来让它工作。

【讨论】:

Java 确实有一种官方的方式来集成本机代码。它被称为 JNI (docs.oracle.com/javase/8/docs/technotes/guides/jni)。基于此,有一些工具,如 JNA 或 SWIG,可以让使用起来更加舒适。 Graal Java VM 还具有 GNFI,它是 JNI 的真正替代品,据说效率更高(但仅适用于 Graal-VM)。

以上是关于Pig 中 UDF 中 Jython 的限制的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon EMR 上为 Pig UDF 加载外部 python 模块

在 Pig 中将关系传递给 Python UDF 时出错

Pig 的 UDF 中存在“in”会导致问题

在 PIG UDF 中调试

显示结果中的 Pig Udf

Pig:一类中有多个UDF