環境
- OS Ubuntu 18.04
- Java
$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)
- 必要に応じて環境変数JAVA_HOMEやPYSPARK_PYTHONなどを正しく設定してください
生じた事象
from graphframes import GraphFrame
nodes = #nodeを定義
edges = #edgeを定義
GraphFrame(nodes, edges)
このコードを走らせようとした際にGraphFrameのコンストラクタ内で以下のようなエラーを吐く.
...
py4j.protocol.Py4JJavaError: An error occurred while calling o55.loadClass.
: java.lang.ClassNotFoundException: org.graphframes.GraphFramePythonAPI
at ...
graphframesのjarライブラリが読み込めてないことに起因するのでこれを入れてあげれば解決します.
対応策
読み込み先の特定
$SPARK_HOME/jars
が存在するならそこでOKです.
$SPARK_HOME
が設定されていない場合,まずpysparkのあるディレクトリを特定します.
pipをお使いの方はpip show pyspark
でLocationの欄を見ればOK.
あるいは次のようにして確認できます.
import pyspark
print(pyspark.__path__)
# ['/usr/local/lib/python3.6/dist-packages/pyspark'] のような形式で返ってくる
特定が完了したらそのpyspark/jars
が読み込み先のディレクトリです.
jarのダウンロード
このサイトからお手持ちのversionに対応したjarをダウンロードして先ほど特定したディレクトリの中に入れれば完了です.
何か正攻法が存在するなら教えていただければ幸いです.
参考サイト
https://stackoverflow.com/questions/39261370/unable-to-run-a-basic-graphframes-example
https://markhneedham.com/blog/2019/04/17/pyspark-class-not-found-exception-org-graphframes-graphframepythonapi/