2
0

More than 3 years have passed since last update.

Apache Spark(pyspark)でmavenリポジトリのjarを追加

Last updated at Posted at 2020-08-14

Apache Sparkで追加のパッケージ(Mavenリポジトリにあるもの)を利用したいときに、configの設定が必要になるときがあるので自分用にメモ。

1. Mavenパッケージ

Mavenリポジトリ上のパッケージ情報はgroupIdartifactIdversionの3つの要素からなるらしい。(Maven coordinatesというらしい)
Sparkのconfigに渡すときはこれらを:でつないで、groupId:artifactId:versionの文字列にしたものを用意する。

複数のパッケージを渡したいときはこれらを,でつないで、groupId1:artifactId1:version1,groupId2:artifactId2:version2,groupId3:artifactId3:version3
のようにする。

2. configの設定

設定ファイルに書いておいて常に適用されるようにしておくとか、コードの中で呼び出すなど様々な方法がある。
自分がやったことのある方法について記す。

2-1. コードの中でSparkSessionに渡す

例1:

from pyspark.sql import SparkSession

# configメソッドを使い、"spark.jars.packages"の項目を設定する
spark = SparkSession \
    .builder \
    .config("spark.jars.packages", "graphframes:graphframes:0.8.0-spark3.0-s_2.12") \
    .getOrCreate()

例2(複数パッケージを指定):

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .config(
        "spark.jars.packages",
        "graphframes:graphframes:0.8.0-spark3.0-s_2.12,org.postgresql:postgresql:42.2.14"
    ) \
    .getOrCreate()

簡易的に使ってみるときや設定ファイルを汚したくないときによくやる。

Spark UI(ローカルで動かしているときは http://localhost:4040 など)の'Environment'などを確認すると、jarファイルが追加されているのが確認出来る。

2-2. spark-defaults.confに記入

Apache Sparkのインストール場所を$SPARK_HOMEとすると、おそらく$SPARK_HOME/conf/spark-defaults.confに以下の設定を追記すればOK
(なお、同じディレクトリ上にspark-defaults.conf.defaultみたいなテンプレートファイルがあるはず)

spark-defaults.conf
# 以下を追記
spark.jars.packages    graphframes:graphframes:0.8.0-spark3.0-s_2.12,org.postgresql:postgresql:42.2.14

こうしておくと、SparkSession生成時にconfigを設定しなくてもデフォルトで設定される。

2-3. その他

やったことがあるのは主に上記の2つだが、
Sparkはconfigの設定方法が色々あるようなので、他のやり方もある。

アプリケーションとしてspark-submitを使って実行するような場合はここなどを参考に、spark-submitのオプション:--packagesを使って設定出来るはず。
あるいは、bashなどのCLIでpyspark --packages groupId:artifactId:versionとかspark-shell --packages groupId:artifactId:versionなどとすると、configにpackage情報を渡した状態でpysparkspark-shellのセッションを開始出来る。

Sparkは多機能でカバーできていない部分がまだ沢山あるので、他にもやりようがあるかもしれない。

あとがき

2-12-2はjarの追加方法というより、一般的なconfigの設定方法な気がしてきた

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0