Spark本地模式下包含包

Cod*_*ing 5 python pytest apache-spark pyspark

我正在用 python 为我的 Spark 代码编写一些单元测试。我的代码取决于spark-csv。在生产中我用来spark-submit --packages com.databricks:spark-csv_2.10:1.0.3提交我的 python 脚本。

我正在使用pytest在 Spark 模式下运行测试local

conf = SparkConf().setAppName('myapp').setMaster('local[1]')
sc = SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

我的问题是,由于pytest不使用spark-submit运行我的代码,我如何提供spark-csv对 python 进程的依赖?

Abh*_*ary 5

您可以使用配置文件spark.driver.extraClassPath来解决问题。Spark-default.conf

并添加属性

 spark.driver.extraClassPath /Volumes/work/bigdata/CHD5.4/spark-1.4.0-bin-hadoop2.6/lib/spark-csv_2.11-1.1.0.jar:/Volumes/work/bigdata/CHD5.4/spark-1.4.0-bin-hadoop2.6/lib/commons-csv-1.1.jar
Run Code Online (Sandbox Code Playgroud)

设置上述内容后,从 shell 运行时甚至不需要包标志。

sqlContext = SQLContext(sc)
    df = sqlContext.read.format('com.databricks.spark.csv').options(header='false').load(BASE_DATA_PATH + '/ssi.csv')
Run Code Online (Sandbox Code Playgroud)

这两个 jar 都很重要,因为 Spark-csv 依赖于commons-csvapache jar。spark-csv您可以构建或从 mvn-site 下载该jar。