Как добавить сторонние java-банки для использования в pyspark

У меня есть некоторые сторонние клиентские библиотеки баз данных на Java. Я хочу получить к ним доступ через

java_gateway.py

Например: чтобы клиентский класс (а не драйвер jdbc!) был доступен клиенту python через java-шлюз:

java_import(gateway.jvm, "org.mydatabase.MyDBClient")

Непонятно, где добавить сторонние библиотеки в путь класса jvm. Я попытался добавить в compute-classpath.sh, но это не помогло: я получаю

 Py4jError: Trying to call a package

Кроме того, при сравнении с Hive: файлы jive jar НЕ загружаются через compute-classpath.sh, поэтому это делает меня подозрительным. Кажется, существует какой-то другой механизм, который пытается создать путь класса jvm side.

Ответ 1

Вы можете добавить внешние банки в качестве аргументов в pyspark

pyspark --jars file1.jar,file2.jar

Ответ 2

Вы можете добавить путь к файлу JAR, используя конфигурацию Spark во время выполнения.

Вот пример:

conf = SparkConf().set("spark.jars", "/path-to-jar/spark-streaming-kafka-0-8-assembly_2.11-2.2.1.jar")

sc = SparkContext( conf=conf)

Обратитесь к документу за дополнительной информацией.

Ответ 3

Вы можете добавить --jars xxx.jar при использовании spark-submit

./bin/spark-submit --jars xxx.jar your_spark_script.py

или установите переменную окружения SPARK_CLASSPATH

SPARK_CLASSPATH='/path/xxx.jar:/path/xx2.jar' your_spark_script.py

your_spark_script.py был написан pyspark API

Ответ 4

  • Извлеките загруженный файл jar.
  • Изменить системную переменную среды
    • Добавьте переменную с именем SPARK_CLASSPATH и установите ее значение в файл \path\to\the\extract\jar \.

Например: вы извлекли файл jar на диске C в папке с именем sparkts его значение должно быть: C:\sparkts

  1. Перезапустить ваш кластер

Ответ 5

Еще одна вещь, которую вы можете сделать, это добавить Jar в папку jar pyspark, где установлен pyspark. Обычно /python3.6/site-packages/pyspark/jars

Будьте осторожны, если вы используете виртуальную среду, которая нужна jar для установки pyspark в виртуальной среде.

Таким образом, вы можете использовать JAR без отправки его в командной строке или загрузить его в свой код.

Ответ 6

Все вышеперечисленные ответы не спомогли мне

Что я должен был сделать с Pyspark было

pyspark --py-files /path/to/jar/xxxx.jar

Для ноутбука Jupyter:

spark = (SparkSession
    .builder
    .appName("Spark_Test")
    .master('yarn-client')
    .config("spark.sql.warehouse.dir", "/user/hive/warehouse")
    .config("spark.executor.cores", "4")
    .config("spark.executor.instances", "2")
    .config("spark.sql.shuffle.partitions","8")
    .enableHiveSupport()
    .getOrCreate())

# Do this 

spark.sparkContext.addPyFile("/path/to/jar/xxxx.jar")

Ссылка на источник, где я его нашел: https://github.com/graphframes/graphframes/issues/104