将jar添加到独立的pyspark

sr4lhrrt  于 2021-05-17  发布在  Spark
关注(0)|答案(5)|浏览(704)

我要启动Pypark计划:

$ export SPARK_HOME=
$ export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip
$ python

以及py代码:

from pyspark import SparkContext, SparkConf

SparkConf().setAppName("Example").setMaster("local[2]")
sc = SparkContext(conf=conf)

如何添加jar依赖项,比如databricks csv jar?使用命令行,我可以像这样添加包:

$ pyspark/spark-submit --packages com.databricks:spark-csv_2.10:1.3.0

但我没有用这些。这个程序是一个更大的工作流的一部分,不使用spark submit,我应该能够运行我的./foo.py程序,它应该可以正常工作。
我知道你可以为extraclasspath设置spark属性,但是你必须将jar文件复制到每个节点?
尝试了conf.set(“spark.jars”,“jar1,jar2”),但在py4jcnf异常下无法正常工作

vuv7lop3

vuv7lop31#

任何依赖项都可以通过 spark.jars.packages (设置 spark.jars 应工作以及)财产在 $SPARK_HOME/conf/spark-defaults.conf . 它应该是一个逗号分隔的坐标列表。
包或类路径属性必须在jvm启动之前设置,这在 SparkConf 初始化。意思是 SparkConf.set 方法不能在此处使用。
另一种方法是 PYSPARK_SUBMIT_ARGS 前环境变量 SparkConf 对象已初始化:

import os
from pyspark import SparkConf

SUBMIT_ARGS = "--packages com.databricks:spark-csv_2.11:1.2.0 pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS

conf = SparkConf()
sc = SparkContext(conf=conf)
wr98u20j

wr98u20j2#

import os
import sys
spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, spark_home + "/python")
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.10.4-src.zip'))

它来了。。。。

sys.path.insert(0, <PATH TO YOUR JAR>)

然后。。。

import pyspark
import numpy as np

from pyspark import SparkContext

sc = SparkContext("local[1]")
.
.
.
hyrbngr7

hyrbngr73#

我在一个不同的地方遇到了类似的问题 jar (“用于spark的mongodb连接器”, mongo-spark-connector ),但最大的警告是我安装了 Spark 通过 pysparkconda ( conda install pyspark ). 因此,所有的援助 Spark -具体的答案并没有什么帮助。对于那些安装了 conda ,以下是我拼凑的过程:
1) 找到你的 pyspark/jars 位于。我的是这样的: ~/anaconda2/pkgs/pyspark-2.3.0-py27_0/lib/python2.7/site-packages/pyspark/jars .
2) 下载 jar 从该位置将文件导入步骤1中找到的路径。
3) 现在,您应该能够运行这样的程序(代码取自mongodb官方教程,使用上面briford wylie的答案):

from pyspark.sql import SparkSession

my_spark = SparkSession \
    .builder \
    .appName("myApp") \
    .config("spark.mongodb.input.uri", "mongodb://127.0.0.1:27017/spark.test_pyspark_mbd_conn") \
    .config("spark.mongodb.output.uri", "mongodb://127.0.0.1:27017/spark.test_pyspark_mbd_conn") \
    .config('spark.jars.packages', 'org.mongodb.spark:mongo-spark-connector_2.11:2.2.2') \
    .getOrCreate()

免责声明:
1) 我不知道这个答案是否合适;请告诉我一个更好的地方,我会搬走的。
2) 如果你认为我有错误或有改进的过程中,请评论,我会修改。

nzk0hqpo

nzk0hqpo4#

经过多次尝试,终于找到了答案。答案具体到使用spark-csv-jar。在硬盘上创建一个文件夹,比如d:\spark\spark\u jars。将以下jar放在那里:
spark-csv_2.10-1.4.0.jar(这是我正在使用的版本)
commons-csv-1.1.jar
univocity-parsers-1.5.1.jar
2和3是spark csv所需的依赖项,因此这两个文件也需要下载。转到您下载spark的conf目录。在spark-defaults.conf文件中添加以下行:
spark.driver.extraclasspath d:/spark/spark\u jars/*
星号应该包括所有的jar。现在像往常一样运行python,创建sparkcontext和sqlcontext。现在您应该可以使用spark csv作为

sqlContext.read.format('com.databricks.spark.csv').\
options(header='true', inferschema='true').\
load('foobar.csv')
hi3rlvi2

hi3rlvi25#

这里有很多方法(设置env vars,添加到$spark\u home/conf/spark-defaults.conf等等),一些答案已经涵盖了这些。我想为那些专门使用jupyter笔记本和在笔记本中创建spark会话的人添加一个额外的答案。以下是最适合我的解决方案(在我的例子中,我希望加载Kafka包):

spark = SparkSession.builder.appName('my_awesome')\
    .config('spark.jars.packages', 'org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0')\
    .getOrCreate()

使用这行代码,我不需要做任何其他事情(没有envs或conf文件更改)。
2019-10-30更新:上面的代码行仍然工作得很好,但我想为看到这个答案的新人注意几件事:
最后您需要更改版本以匹配spark版本,因此对于spark 2.4.4,您需要: org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.4 这个jar的最新版本 spark-sql-kafka-0-10_2.12 对于我(mac笔记本电脑)来说是崩溃的,所以如果你在调用'readstream'时遇到崩溃,请恢复到2.11。

相关问题