通过这个架构图,可以看到,Python Table API 是建立在 Java Table API 的基础上的,我们并没有单独的从上到下实现一套 Python Table API。
Python Table API 是一个特别的存在,它是在 Java Table API 的基础上加了一层薄薄的 API,这两层 API 是可以相互调用的。
在 client 端的时候,会起一个 Python VM 然后也会起一个 Java VM ,两个 VM 进行通信。通信的细节可以看下面这张图。 我们可以看到 Python 跟 Java VM 里面都会用 Py4J 各自起一个 Gateway。然后 Gateway 会维护一些对象。
比如我们在 Python 这边创建一个 table 对象的时候,它也会在相应的 Java 这边创建一个相同 table 对象。如果创建一个 TableEnvironment 对象,在 Java 部分也会创建一个 TableEnvironment 对象。
如果你调用 table 对象上的方法,那么也会映射到 Java 这边,所以是一个一一映射的关系。
基于这一套架构,我们可以得出一个结论:如果你用 Python Table API 写出了一个作业,这个作业没有 Python UDF 的时候,那么这个作业的性能跟你用 Java 写出来的作业性能是一样的。因为底层的架构都是同一套 Java 的架构。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。