Как просмотреть импортированные классы из шлюза py4j
Рассмотрим следующий код инициализации шлюза 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())
1 ответ
Решение
Не существует общедоступного API для извлечения всех импортированных классов, но вы можете открыть запрос функции.
Между тем, вы можете использовать внутренний API, который может измениться в будущем, но эта часть внутреннего 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']