python - notebook - Cómo agregar tarros java de terceros para usar en pyspark
spark 2.3 0 bin hadoop2 7 tgz (6)
- Extrae el archivo jar descargado.
- Editar variable de entorno del sistema
- Agregue una variable llamada SPARK_CLASSPATH y establezca su valor en / ruta / a / el / extraído / jar / archivo.
Por ejemplo: ha extraído el archivo jar en la unidad C en la carpeta llamada sparkts, su valor debería ser: C: / sparkts
- Reinicia tu cluster
Tengo algunas bibliotecas de clientes de bases de datos de terceros en Java. Quiero acceder a ellos a través de
java_gateway.py
Por ejemplo: para que la clase de cliente (¡no un controlador jdbc!) Esté disponible para el cliente de Python a través de la puerta de enlace java:
java_import(gateway.jvm, "org.mydatabase.MyDBClient")
No está claro dónde agregar las bibliotecas de terceros a la ruta de clase jvm. Intenté agregar a compute-classpath.sh pero eso no parece funcionar: me sale
Py4jError: Trying to call a package
Además, al comparar con Hive: los archivos jar de Hive NO se cargan a través de compute-classpath.sh, por lo que eso me hace sospechar. Parece que se está produciendo algún otro mecanismo para configurar la ruta de clase jvm side.
Podría agregar --jars xxx.jar
cuando use spark-submit
./bin/spark-submit --jars xxx.jar your_spark_script.py
o establecer la variable de entorno SPARK_CLASSPATH
SPARK_CLASSPATH=''/path/xxx.jar:/path/xx2.jar'' your_spark_script.py
your_spark_script.py
fue escrito por la API de pyspark
Puede agregar la ruta al archivo jar utilizando la configuración de Spark en Runtime.
Aquí hay un ejemplo :
conf = SparkConf().set("spark.jars", "/path-to-jar/spark-streaming-kafka-0-8-assembly_2.11-2.2.1.jar")
sc = SparkContext( conf=conf)
Consulte el document para más información.
Puedes agregar jars externos como argumentos a pyspark
pyspark --jars file1.jar,file2.jar
Todas las respuestas anteriores no funcionaron para mí
Lo que tuve que hacer con pyspark fue
pyspark --py-files /path/to/jar/xxxx.jar
Para Jupyter Notebook:
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")
Enlace a la fuente donde lo encontré: https://github.com/graphframes/graphframes/issues/104
Una cosa más que puedes hacer es agregar el Jar en la carpeta de pyspark jar donde está instalado pyspark. Usualmente /python3.6/site-packages/pyspark/jars
Tenga cuidado si está utilizando un entorno virtual que el jar necesita para ir a la instalación de pyspark en el entorno virtual.
De esta manera, puede usar el jarro sin enviarlo en la línea de comandos o cargarlo en su código.