如何添加第三方java jar以在pyspark中使用

jav*_*dba 23 python py4j apache-spark

我有一些Java的第三方数据库客户端库.我想通过它访问它们

java_gateway.py
Run Code Online (Sandbox Code Playgroud)

例如:通过java网关使python客户端可以使用客户端类(不是jdbc驱动程序!):

java_import(gateway.jvm, "org.mydatabase.MyDBClient")
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚将第三方库添加到jvm类路径的位置.我试图添加到compute-classpath.sh,但这似乎没有工作:我明白了

 Py4jError: Trying to call a package
Run Code Online (Sandbox Code Playgroud)

此外,与Hive比较时:hive jar文件不是通过compute-classpath.sh加载的,所以这让我很怀疑.似乎还有一些其他机制可以设置jvm side classpath.

小智 25

您可以将外部jar作为参数添加到pyspark

pyspark --jars file1.jar,file2.jar
Run Code Online (Sandbox Code Playgroud)

  • 请注意,逗号后面没有空格!如果在那里放置空格,它将失败. (5认同)

AAB*_*AAB 21

您可以在运行时使用Spark配置添加jar文件的路径.

这是一个例子:

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

sc = SparkContext( conf=conf)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档.


Rya*_*hou 12

您可以--jars xxx.jar在使用spark-submit时添加

./bin/spark-submit --jars xxx.jar your_spark_script.py
Run Code Online (Sandbox Code Playgroud)

或设置环境变量 SPARK_CLASSPATH

SPARK_CLASSPATH='/path/xxx.jar:/path/xx2.jar' your_spark_script.py
Run Code Online (Sandbox Code Playgroud)

your_spark_script.py 是由pyspark API编写的


小智 7

除了接受的答案之外,您还有以下选择:

  1. 如果您在虚拟环境中,那么您可以将其放入

    例如lib/python3.7/site-packages/pyspark/jars

  2. 如果你想让java发现它那么你可以把你的jre安装ext/目录放在下面


小智 5

  1. 解压缩下载的jar文件.
  2. 编辑系统环境变量
    • 添加名为SPARK_CLASSPATH的变量,并将其值设置为\ path \至\ extracted\jar\file.

例如:您已在C盘中提取了名为sparkts的文件夹中的jar文件,其值应为:C:\ sparkts

  1. 重新启动群集


Gay*_*tri 5

以上所有答案均不适用于我

我与pyspark所做的是

pyspark --py-files /path/to/jar/xxxx.jar
Run Code Online (Sandbox Code Playgroud)

对于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")
Run Code Online (Sandbox Code Playgroud)

链接到我找到它的源:https : //github.com/graphframes/graphframes/issues/104

  • addPyFile 用于 python 依赖项,而不是 jar https://spark.apache.org/docs/0.7.2/api/pyspark/pyspark.context.SparkContext-class.html#addPyFile (4认同)