我正在推出一个pyspark计划:
$ 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程序,它应该可以工作。
答案 0 :(得分:19)
这里有很多方法(设置ENV vars,添加到$ SPARK_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文件更改)。
答案 1 :(得分:10)
可以使用$SPARK_HOME/conf/spark-defaults.conf
中的spark.jars.packages
(设置spark.jars
也应该有用)属性传递任何依赖项。它应该是逗号分隔的坐标列表。
必须在启动JVM和this happens during SparkConf
initialization之前设置包或类路径属性。这意味着此处不能使用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)
答案 2 :(得分:2)
经过多次尝试后终于找到了答案。答案特定于使用spark-csv jar。在硬盘中创建一个文件夹,说D:\ Spark \ spark_jars。将以下罐放在那里:
2和3是spark-csv所需的依赖项,因此这两个文件也需要下载。转到已下载Spark的conf目录。在spark-defaults.conf文件中添加以下行:
spark.driver.extraClassPath D:/ Spark / spark_jars / *
星号应包括所有罐子。现在运行Python,像往常一样创建SparkContext,SQLContext。现在你应该能够使用spark-csv作为
sqlContext.read.format('com.databricks.spark.csv').\
options(header='true', inferschema='true').\
load('foobar.csv')
答案 3 :(得分:2)
我遇到了另一个jar
(“MongoDB Connector for Spark”,mongo-spark-connector
)的类似问题,但最大的警告是我通过Spark
安装了pyspark
在conda
(conda install pyspark
)中。因此,Spark
特定答案的所有帮助都不是很有帮助。对于那些使用conda
安装的人来说,这是我拼凑在一起的过程:
1)找到pyspark/jars
所在的位置。我正走在这条道路上:~/anaconda2/pkgs/pyspark-2.3.0-py27_0/lib/python2.7/site-packages/pyspark/jars
。
2)Download将jar
文件放入步骤1中找到的路径this location。
3)现在你应该可以运行这样的代码(代码取自MongoDB official tutorial,使用Briford Wylie's answer above):
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)我不知道这个答案是否适合这个问题/ SO问题;请告知更好的地方,我会移动它。
2)如果您认为我有错误或对上述流程有所改进,请发表评论,我会修改。
答案 4 :(得分:0)
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]")
.
.
.