Skip to main content
 首页 » 编程设计

python之如何查看从py4j网关导入的类

2025年05月04日15JeffreyZhao

考虑以下 py4j 网关初始化代码:

from py4j.java_gateway import java_import, JavaGateway, GatewayClient 
gateway = JavaGateway(GatewayClient(port=gateway_port), auto_convert=False) 
 
java_import(gateway.jvm,'org.apache.hadoop.hbase.client.*') 
java_import(gateway.jvm,'org.apache.hadoop.hbase.filter.*') 

可以在网关 上调用什么代码来查看它包含的导入 - 和/或验证给定类是否可用?即类似的东西:

print("Client class: %s\n" %gw.get_class('org.apache.hbase.client.Client').get_name()) 

请您参考如下方法:

没有公共(public) API 来检索所有导入的类,但您可以打开 feature request .

在此期间,您可以使用内部API, future 可能会发生变化,但这部分内部API自早期版本以来一直保持稳定:

from py4j.java_gateway import java_import, JavaGateway, JavaObject 
from py4j.protocol import DEFAULT_JVM_ID 
 
def get_imports(gateway): 
    java_jvm_view = JavaObject(DEFAULT_JVM_ID[1:], gateway._gateway_client) 
    imports = list(java_jvm_view.getSingleImportsMap().values()) + list(java_jvm_view.getStarImports()) 
    return imports 
 
java_gateway = JavaGateway() 
java_import(gateway.jvm, "java.util.Collection") 
java_import(gateway.jvm, "java.sql.*") 
java_import(gateway.jvm, "java.util.ArrayList") 
imports = get_imports(gateway) 
# [u'java.util.ArrayList', u'java.util.Collection', u'java.lang', u'java.sql']