pysparkでGraphFramesを利用する手順
本エントリでは、pysparkからGraphFramesを利用する手順を示します。
pyspark REPLからの利用手順と、
IntelliJ IDEAで開発環境を設定する手順を示します。
GraphFrames
https://graphframes.github.io/graphframes/docs/_site/index.html
pyspark REPLからの利用
Apache Sparkのダウンロードと展開
spark.apache.orgから、Apache Sparkをダウンロードします。
Downloads | spark.apache.org
https://spark.apache.org/downloads.html
このエントリの手順では「spark-2.4.3-bin-hadoop2.7.tgz」をダウンロードしました。
このファイルを適当な場所に展開します。
$ tar zxf spark-2.4.3-bin-hadoop2.7.tgz
以下のようにspark-shellを実行してversionが表示されることを確認します。
$ export SPARK_HOME=※展開先※/spark-2.4.3-bin-hadoop2.7
$ $SPARK_HOME/bin/spark-shell --version
pysparkの環境設定
次に、pysparkが利用するPythonを設定します。
numpyがインストールされたPython環境を利用する必要があるので、
ここではAnacondaのPython環境を指定します。
templateから、spark-env.shを準備します。
$ cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
spark-env.shの末尾に、 以下のように利用するPythonのパスを記載します。
export PYSPARK_PYTHON=※ユーザのホームディレクトリ※/.anyenv/envs/pyenv/versions/anaconda3-2019.03/bin/python
# 上記はanyenvでAnacondaをインストールしている場合の例です。
起動とサンプルの実行
GraphFramesをパッケージに指定して、pysparkのREPLを起動します。
$SPARK_HOME/bin/pyspark --packages graphframes:graphframes:0.7.0-spark2.4-s_2.11
最新のパッケージは、spark-packages.orgで確認して下さい。
graphframes | SparkPackages
https://spark-packages.org/package/graphframes/graphframes
QuickStartにあるサンプルを実行してみます。
GraphFrames Quick-Start Guide
https://graphframes.github.io/graphframes/docs/_site/quick-start.html
以下のように結果が確認出来ます。
>>> v = sqlContext.createDataFrame([
... ("a", "Alice", 34),
... ("b", "Bob", 36),
... ("c", "Charlie", 30),
... ], ["id", "name", "age"])
>>> e = sqlContext.createDataFrame([
... ("a", "b", "friend"),
... ("b", "c", "follow"),
... ("c", "b", "follow"),
... ], ["src", "dst", "relationship"])
>>> from graphframes import *
>>> g = GraphFrame(v, e)
>>> g.inDegrees.show()
+---+--------+
| id|inDegree|
+---+--------+
| c| 1|
| b| 2|
+---+--------+
IntelliJ IDEAでの開発環境設定手順
IntelliJ IDEAでGraphFramesの開発環境を設定する手順ですが、
以下エントリの手順でpyspark用の開発環境が設定出来ていることを前提として説明します。
IntelliJ IDEAでpyspark用の開発環境を設定する手順
https://takemikami.com/2018/11/27/IntelliJ-IDEApyspark.html
spark環境へのGraphFramesパッケージ追加
templateから、spark-defaults.confを準備します。
$ cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
spark-defaults.confの末尾に、
以下のように利用するGraphFramesパッケージを記載します。
spark.jars.packages graphframes:graphframes:0.7.0-spark2.4-s_2.11
最新のパッケージは、spark-packages.orgで確認して下さい。
graphframes | SparkPackages
https://spark-packages.org/package/graphframes/graphframes
Python環境にgraphframesのインストール
Pythonの環境にGraphFramesをインストールします。
$ pip install graphframes
以上で、IntelliJ IDEAからGraphFramesを利用する環境が整いました。
サンプルコードの作成と実行
例えば、以下のようなコードを作成します。
pysparksample/graph.py
from pyspark.sql import SparkSession, SQLContext
from graphframes import GraphFrame
if __name__ == '__main__':
spark = SparkSession.builder.appName('sample').getOrCreate()
sqlContext = SQLContext(spark)
v = sqlContext.createDataFrame([
("a", "Alice", 34),
("b", "Bob", 36),
("c", "Charlie", 30),
], ["id", "name", "age"])
e = sqlContext.createDataFrame([
("a", "b", "friend"),
("b", "c", "follow"),
("c", "b", "follow"),
], ["src", "dst", "relationship"])
g = GraphFrame(v, e)
g.inDegrees.show()
「pysparksample/graph.py」コードの左側の三角記号から、 処理を実行すると、以下のような結果が出力されます。
+---+--------+
| id|inDegree|
+---+--------+
| c| 1|
| b| 2|
+---+--------+