Javaのサードパーティデータベースクライアントライブラリがいくつかあります。にアクセスしたい
Java_gateway.py
例:クライアントクラス(jdbcドライバーではない!)をpythonクライアントからJavaゲートウェイ経由で利用可能にする:
Java_import(gateway.jvm, "org.mydatabase.MyDBClient")
Jvmクラスパスにサードパーティライブラリを追加する場所は明確ではありません。 compute-classpath.shに追加しようとしましたが、それはうまくいかないようでした:
Py4jError: Trying to call a package
また、Hiveと比較すると、Hive jarファイルはcompute-classpath.shを介してロードされないため、疑わしくなります。 jvm側のクラスパスを設定する他のメカニズムが発生しているようです。
外部jarを引数としてpysparkに追加できます
pyspark --jars file1.jar,file2.jar
Spark実行時の構成を使用して、jarファイルにパスを追加できます。
以下に例を示します。
conf = SparkConf().set("spark.jars", "/path-to-jar/spark-streaming-kafka-0-8-Assembly_2.11-2.2.1.jar")
sc = SparkContext( conf=conf)
詳細については document を参照してください。
Spark-submitを使用するときに--jars xxx.jar
を追加できます
./bin/spark-submit --jars xxx.jar your_spark_script.py
または環境変数SPARK_CLASSPATH
を設定します
SPARK_CLASSPATH='/path/xxx.jar:/path/xx2.jar' your_spark_script.py
your_spark_script.py
はpyspark APIによって作成されました
たとえば、sparktsという名前のフォルダーにあるCドライブのjarファイルを抽出しました。その値はC:\ sparktsです。
上記のすべての答えは私にはうまくいきませんでした
私がpysparkでしなければならなかったことは
pyspark --py-files /path/to/jar/xxxx.jar
Jupyterノートブックの場合:
spark = (SparkSession
.builder
.appName("Spark_Test")
.master('yarn-client')
.config("spark.sql.warehouse.dir", "/user/Hive/warehouse")
.config("spark.executor.cores", "4")
.config("spark.executor.instances", "2")
.config("spark.sql.shuffle.partitions","8")
.enableHiveSupport()
.getOrCreate())
# Do this
spark.sparkContext.addPyFile("/path/to/jar/xxxx.jar")
私が見つけたソースへのリンク: https://github.com/graphframes/graphframes/issues/104
もう1つできることは、pysparkがインストールされているpyspark jarフォルダーにJarを追加することです。通常/python3.6/site-packages/pyspark/jars
Jarが仮想環境のpysparkインストールに移動する必要がある仮想環境を使用している場合は注意してください。
このようにして、コマンドラインで送信したり、コードにロードしたりせずにjarを使用できます。