【问题标题】:How to view imported classes from py4j gateway如何从 py4j 网关查看导入的类
【发布时间】:2015-02-15 10:20:30
【问题描述】:

考虑以下 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())

【问题讨论】:

    标签: python py4j


    【解决方案1】:

    没有公共 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']
    

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      相关资源
      最近更新 更多