Я пытаюсь запустить собственный класс чтения HDFS в PySpark. Этот класс написан на Java, и мне нужно получить к нему доступ из PySpark, либо из оболочки, либо с помощью spark-submit.Запуск пользовательского класса Java в PySpark
В PySpark я извлекаю JavaGateway из SparkContext (sc._gateway
).
Скажем, у меня есть класс:
package org.foo.module
public class Foo {
public int fooMethod() {
return 1;
}
}
Я пытался упаковать его в банку и передать его с опцией --jar
к pyspark и затем запустить:
from py4j.java_gateway import java_import
jvm = sc._gateway.jvm
java_import(jvm, "org.foo.module.*")
foo = jvm.org.foo.module.Foo()
Но я получаю ошибка:
Py4JError: Trying to call a package.
Может кто-то помочь в этом? Благодарю.
Использование параметра путь к классам на самом деле работал, и я могу использовать классы в драйвере Spark. Однако, когда я пытаюсь использовать их внутри преобразований, я получаю разные ошибки. Опция 'SparkContext.hadoop *' не подходит для моего использования. Я хочу распараллелить список путей, а затем сделать преобразование, которое читает эти файлы. – hmourit
Внутренние преобразования? Это невозможно (или, по крайней мере, не использовать этот подход). – zero323
Вы также можете добавить его в путь к классам, добавив его в качестве параметра cmd-строки с помощью: '--driver-class-path', если вы не хотите изменять свои файлы конфигурации. –