pysparkでSparkを実行するには、2つのコンポーネントを連携させる必要があります。
pyspark
pythonパッケージ
- JVMのSparkインスタンス
spark-submitまたはpysparkを使用して起動する場合、これらのスクリプトは両方に対応します。つまり、スクリプトがpysparkを検出できるようにPYTHONPATH、PATHなどを設定し、また、sparkインスタンスを開始して、パラメーターに従って構成します。 、たとえば--master X
または、これらのスクリプトをバイパスして、のようにpythonインタープリターで直接Sparkアプリケーションを実行することもできますpython myscript.py
。これは、sparkスクリプトがより複雑になり始め、最終的に独自の引数を受け取るときに特に興味深いものです。
- Pythonインタープリターがpysparkパッケージを見つけられるようにしてください。すでに説明したように、spark / pythonディレクトリをPYTHONPATHに追加するか、pip installを使用してpysparkを直接インストールします。
- スクリプトからSparkインスタンスのパラメーターを設定します(これまではpysparkに渡されていました)。
- 通常--confで設定するスパーク構成の場合、SparkSession.builder.configの構成オブジェクト(または文字列構成)で定義されます
- 現時点での主なオプション(--master、-driver-memなど)については、PYSPARK_SUBMIT_ARGS環境変数に書き込むことで設定できます。物事をよりクリーンで安全なものにするために、Python自体から設定でき、sparkは起動時にそれを読み取ります。
- インスタンスを開始します。これには
getOrCreate()
、ビルダーオブジェクトから呼び出す必要があります。
したがって、スクリプトは次のようになります。
from pyspark.sql import SparkSession
if __name__ == "__main__":
if spark_main_opts:
# Set main options, e.g. "--master local[4]"
os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"
# Set spark config
spark = (SparkSession.builder
.config("spark.checkpoint.compress", True)
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
.getOrCreate())