2014-12-16 2 views
1

Рассмотрим следующий пример py4j код шлюза INIT:Как просмотреть импортированные классы от 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()) 

ответ

5

Там нет общественного API, чтобы получить все импортированные классы, но вы можете открыть feature request.

В то же время, вы можете использовать внутренний 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'] 
+0

необходимо также включить 'JavaObject' в импорт вверху. –

+0

Отредактирован ответ. Благодаря! – Barthelemy