在pyspark代码中加载外部库

时间:2016-02-11 17:52:13

标签: python csv apache-spark pyspark

我有一个我在本地模式下使用的火花簇。我想用databricks外部库spark.csv读取一个csv。我启动我的应用程序如下:

import os
import sys

os.environ["SPARK_HOME"] = "/home/mebuddy/Programs/spark-1.6.0-bin-hadoop2.6"

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.8.2.1-src.zip'))

from pyspark import SparkContext, SparkConf, SQLContext

try:
    sc
except NameError:
    print('initializing SparkContext...')
    sc=SparkContext()
sq = SQLContext(sc)
df = sq.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("/my/path/to/my/file.csv")

当我运行它时,我收到以下错误:

java.lang.ClassNotFoundException: Failed to load class for data source: com.databricks.spark.csv.

我的问题:如何在我的python代码中加载databricks.spark.csv库。我不想从外部(使用--packages)从实例加载它。

我尝试添加以下行但它不起作用:

os.environ["SPARK_CLASSPATH"] = '/home/mebuddy/Programs/spark_lib/spark-csv_2.11-1.3.0.jar'

1 个答案:

答案 0 :(得分:2)

如果您从头开始创建SparkContext,则可以在 PYSPARK_SUBMIT_ARGS初始化之前设置SparkContext

os.environ["PYSPARK_SUBMIT_ARGS"] = (
  "--packages com.databricks:spark-csv_2.11:1.3.0 pyspark-shell"
)

sc = SparkContext()

如果出于某种原因,您希望SparkContext已经初始化,正如您的代码所建议的那样,这不会起作用。在本地模式下,您可以尝试使用Py4J网关和URLClassLoader,但它看起来不是一个好主意,并且无法在群集模式下工作。