Как посмотреть, какие классы существуют в JavaPackage - PullRequest
0 голосов
/ 05 октября 2018

Для контекста - я обновляю с версии 2.1.1 до 2.3.1, у меня есть собственный контекст spark, написанный на scala, который я использую в python через py4j / pyspark.

У меня есть следующеекод Python, который перестал работать в 2.3.1:

def get_imports(self):
    java_jvm_view = JavaObject(DEFAULT_JVM_ID[1:], self._sparkSession._jvm._gateway_client)
    imports = list(java_jvm_view.getSingleImportsMap().values()) + list(java_jvm_view.getStarImports())
    return imports

def _get_ctx(self):

    print("[Before Import]")
    print(self.get_imports())

    java_import(self._sparkSession._jvm, "com.myCompany.MyObject")

    print("[After Import]")
    print(self.get_imports())

    print("[com.myCompany.MyObject]")
    print(self._sparkSession._jvm.com.myCompany.MyObject)

    self._sparkSession._jvm.com.myCompany.MyObject.apply(self._sparkSession._jsparkSession)

Вывод для этого:

[Before Import]
scala.Tuple2
org.apache.spark.SparkConf
java.lang
org.apache.spark.api.java
org.apache.spark.api.python
org.apache.spark.ml.python
org.apache.spark.mllib.api.python
org.apache.spark.sql
org.apache.spark.sql.api.python
org.apache.spark.sql.hive

[After Import]
scala.Tuple2
com.myCompany.MyObject
org.apache.spark.SparkConf
java.lang
org.apache.spark.api.java
org.apache.spark.api.python
org.apache.spark.ml.python
org.apache.spark.mllib.api.python
org.apache.spark.sql
org.apache.spark.sql.api.python
org.apache.spark.sql.hive

[com.myCompany.MyObject]
<py4j.java_gateway.JavaPackage object at 0x7a7a7a112bd0>

Когда я запускаю это на 2.1.1, jvm возвращает 'com.myCompany.MyObject 'как JavaClass, а не как JavaPackage.Код не изменился таким образом, что это должно изменить структуру пакета.

Я пытаюсь выяснить, почему он возвращает JavaPackage, мне также интересно, как я могу индексировать содержимое возвращенного пакетатак что я могу видеть, что это на самом деле содержит.

...