Конвертировать Java-объект в python в py4j - PullRequest
0 голосов
/ 24 мая 2019

У меня есть библиотека Scala, и я создаю оболочку Python поверх нее.Один класс моей библиотеки предоставляет следующий метод

package com.example
class F {
  def transform(df: DataFrame): DataFrame
}

, и я использую py4j следующим образом для создания оболочки для F

def F():
return SparkContext.getOrCreate()._jvm.com.example.F()

, которая позволяет мне вызыватьmethod transform

Проблема в том, что объект Dataframe python явно отличается от объекта Dataframe Java.Для этой цели мне нужен способ конвертирования Python df в java, для которого я использую следующий код из py4j docs

class DataframeConverter(object):
def can_convert(self, object):
    from pyspark.sql.dataframe import DataFrame
    return isinstance(object, DataFrame)

def convert(self, object, gateway_client):
    from pyspark.ml.common import _py2java
    return _py2java(SparkContext.getOrCreate(), object)

protocol.register_input_converter(DataframeConverter())

Моя проблема в том, что теперь я хочу сделать обратное: получитьjava dataframe из transform и продолжайте использовать его в python.Я пытался использовать protocol.register_output_converter, но не смог найти ни одного полезного примера, кроме кода, касающегося коллекций Java.

Как я могу это сделать?Очевидным решением будет создание класса python F, который определяет все методы, присутствующие в java F, перенаправляет все вызовы python в jvm, возвращает результат и соответствующим образом конвертирует его.Этот подход работает, но он подразумевает, что я должен переопределить все методы F, таким образом генерируя дублирование кода и намного больше поддержки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...