Сериализация DataFrame через PySpark и JVM - PullRequest
0 голосов
/ 17 апреля 2020

Допустим, у меня есть Scala код:

package com.mycompany

object Helper {

    def process(df: DataFrame): DataFrame = {
        // do some processing and return processed dataframe
    }
}

Вышеупомянутый класс упакован в JAR и добавлен в путь к классам PySpark.

Теперь из PySpark я могу использовать вышеуказанный метод выполнить обработку на фрейме данных PySpark следующим образом:

# JVM version of Python DataFrame through the use of the _jdf property
scala_processed_jdf = sc._jvm.com.mycompany.Helper().process(df._jdf)

Также версия фрейма данных scala, возвращенная из вышеуказанной функции, может быть перенесена в фрейм данных pyspark следующим образом:

DataFrame(scala_processed_jdf, sqlContext)

Как я понимаю, PySpark использует Py4j для связи между Python и JVM.

  1. Но как эта версия фрейма данных этого pyspark отправляется в JVM?
  2. Сериализуется ли весь фрейм данных перед отправкой в ​​JVM и десериализовывается обратно при отправке в PySpark, или просто ссылка df._jdf отправляется в JVM?
  3. Какая библиотека сериализации PySpark использует для этого внутри? И сколько накладных расходов добавляет этот SerDe?
  4. Является ли хорошей практикой передача данных между PySpark и JVM, как показано выше?

Пожалуйста, помогите. Спасибо.

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