Для контекста - я обновляю с версии 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, мне также интересно, как я могу индексировать содержимое возвращенного пакетатак что я могу видеть, что это на самом деле содержит.