2016-03-03 10 views
7

をスタンドアロンのジャーを追加は、私はpysparkプログラムを起動していpyspark

from pyspark import SparkContext, SparkConf 

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

はどのようなDatabricksのcsvジャーなどのjar依存関係を追加するには?コマンドラインを使用して、私はこのようなパッケージを追加することができます。

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

しかし、私はこれらのいずれかを使用していませんよ。このプログラムは、spark-submitを使用していないラガーワークフローの一部です。私の./foo.pyプログラムを実行できるはずです。

  • extraClassPathのスパークプロパティは設定できますが、各ノードにJARファイルをコピーする必要がありますか?
  • しようとしましたconf.set( "spark.jars"、 "jar1、jar2")

答えて

4

依存関係がspark.jars.packagesを使用して渡すことができpy4j CNFの例外を除いてあまりうまくいきませんでした(として動作するはずspark.jarsを設定よく)プロパティの$SPARK_HOME/conf/spark-defaults.conf。カンマで区切られた座標のリストでなければなりません。

JVMを起動する前にパッケージまたはクラスパスプロパティを設定し、this happens during SparkConf initializationを設定する必要があります。つまり、SparkConf.setメソッドはここでは使用できません。

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) 
+1

。私はまだクラスが見つかりませんエラーを取得します。実際、私が設定した環境変数のどれもがSparkによって選ばれることはありません。 'os.environ'は、pythonカーネルが動作しているプロセスに対してのみ環境を設定していますが、サブプロセスはそれらの環境変数を選択しないようです。言い換えれば、 'export ... 'と同等の処理をしていません。何かご意見は? – santon

+0

'subprocess.Popen'は現在の環境のコピーを渡すことができる' env'引数をとります。 – zero323

2

最後に、複数の試行後に答えが見つかりました:

別のアプローチは、SparkConfオブジェクトが初期化される前に、PYSPARK_SUBMIT_ARGS環境変数を設定することです。答えは、spark-csv jarの使用に固有です。ハードドライブにD:\ Spark \ spark_jarsというフォルダを作成します。そこに以下のjarファイルを配置します。

  1. 火花csv_2.10-1.4.0.jar(これは私が使用しているバージョンです)
  2. コモンズ-CSV-1.1.jar
  3. univocity-パーサ-1.5 .1jar

2と3はspark-csvで必要とされる依存関係であり、したがってこれらの2つのファイルもダウンロードする必要があります。 Sparkをダウンロードしたconfディレクトリに移動します。アスタリスクは、すべてのjarファイルを含める必要があります/スパーク/ spark_jars/*

spark.driver.extraClassPath D:スパーク-defaults.confにファイルの行を追加します。今度はPythonを実行し、SparkContext、SQLContextを作成します。今、あなたは

sqlContext.read.format('com.databricks.spark.csv').\ 
options(header='true', inferschema='true').\ 
load('foobar.csv') 
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')) 

の火花CSVを使用することができるはずここでは、次に

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

....付属しています...

import pyspark 
import numpy as np 

from pyspark import SparkContext 

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

動作していないようです。 –

4

は答えのいくつかはすでにこれらをカバー(...など、$ SPARK_HOME/confに/スパーク-defaults.confに追加するには、設定ENVはvarsは)ここに多くのアプローチがあります。私は、具体的Jupyterノートブックを使用してノートブック内からスパークセッションを作成する人のため追加答えを追加したいです。

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ファイルの変更)他に何もする必要はありませんでしたコード行を使用:ここでは私のために最善働いたソリューションです(私の場合は私がロードされたカフカパッケージを望んでいました)。このソリューションは、少なくともノートブックの中に、私のために動作しないようです

+0

このオプションは、他の場所では無視されている/文書化されていないようです...このように、これはjupyterユーザーにとっては良い解決策です。 –

関連する問題