В общем, нет. Хотя доступ в таких случаях иногда возможен, используя __getattribute__
/ getattr
, Py4j просто не разработан с учетом Scala (это на самом деле не является специфичным для Python - хотя технически Scala допускает интерполяцию с Java, это гораздо более богатый язык, и многие из его функций не легко доступны из других языков JVM).
На практике вы должны делать то же самое, что и Spark для внутреннего использования - вместо непосредственного предоставления Scala API вы создаете простой * Java или Scala API, который специально разработан для взаимодействия с гостевыми языками. Поскольку Py4j обеспечивает перевод только между основными типами Python и Java и не обрабатывает обычно используемые интерфейсы Scala, такой промежуточный уровень вам все равно понадобится, если только библиотека Scala не была специально разработана для взаимодействия Java.
По вашему последнему беспокойству
Как я могу использовать код Java / Scala, который предлагает функцию, требующую универсального параметра типа?
Py4j может нормально обрабатывать дженерики Java без какой-либо специальной обработки. Расширенные функции Scala (манифесты, теги классов, теги типов) обычно не нужны, но, опять же, они не разработаны (хотя это возможно) с учетом взаимодействия с Java.
* Как правило, если что-то дружественное к Java (не требует каких-либо сумасшедших взломов, обширных преобразований типов или заполнения пробелов, обычно обрабатываемых компилятором Scala), это также должно хорошо подходить для PySpark. .