Pyspark-sparkcontext

提供:Dev Guides
移動先:案内検索

PySpark-SparkContext

SparkContextは、spark機能へのエントリポイントです。 Sparkアプリケーションを実行すると、ドライバープログラムが起動します。これにはメイン関数があり、ここでSparkContextが開始されます。 次に、ドライバープログラムは、ワーカーノードのエグゼキューター内で操作を実行します。

SparkContextはPy4Jを使用して JVM を起動し、 JavaSparkContext を作成します。 デフォルトでは、PySparkは 'sc' としてSparkContextを使用できるため、新しいSparkContextの作成は機能しません。

SparkContext

次のコードブロックには、PySparkクラスとSparkContextが取得できるパラメーターの詳細が含まれています。

class pyspark.SparkContext (
   master = None,
   appName = None,
   sparkHome = None,
   pyFiles = None,
   environment = None,
   batchSize = 0,
   serializer = PickleSerializer(),
   conf = None,
   gateway = None,
   jsc = None,
   profiler_cls = <class 'pyspark.profiler.BasicProfiler'>
)

パラメーター

以下は、SparkContextのパラメーターです。

  • マスター-接続先のクラスターのURLです。
  • appName -ジョブの名前。
  • sparkHome -Sparkインストールディレクトリ。
  • pyFiles -クラスターに送信してPYTHONPATHに追加する.zipまたは.pyファイル。
  • 環境-ワーカーノードの環境変数。
  • batchSize -単一のJavaオブジェクトとして表されるPythonオブジェクトの数。 バッチ処理を無効にする場合は1、オブジェクトサイズに基づいてバッチサイズを自動的に選択する場合は0、無制限のバッチサイズを使用する場合は-1を設定します。
  • Serializer -RDDシリアライザー。
  • Conf -すべてのSparkプロパティを設定するためのL \ {SparkConf}のオブジェクト。
  • ゲートウェイ-既存のゲートウェイとJVMを使用します。それ以外の場合は、新しいJVMを初期化します。
  • JSC -JavaSparkContextインスタンス。
  • profiler_cls -プロファイリングに使用されるカスタムプロファイラーのクラス(デフォルトはpyspark.profiler.BasicProfilerです)。

上記のパラメーターの中で、 master および appname が主に使用されます。 PySparkプログラムの最初の2行は、次のようになります-

from pyspark import SparkContext
sc = SparkContext("local", "First App")

SparkContextの例– PySparkシェル

SparkContextについて十分に理解したので、PySparkシェルで簡単な例を実行してみましょう。 この例では、 README.md ファイル内の文字「a」または「b」の行数をカウントします。 したがって、ファイルに5行があり、3行に文字 'a’がある場合、出力は→ Line with a:3 になります。 同じことが文字「b」についても行われます。

-次の例では、PySparkシェルの起動時にSparkがscという名前のSparkContextオブジェクトを自動的に作成するため、SparkContextオブジェクトは作成しません。 別のSparkContextオブジェクトを作成しようとすると、次のエラーが発生します-「ValueError:複数のSparkContextsを一度に実行できません」

PySpark Shell

<<< logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md"
<<< logData = sc.textFile(logFile).cache()
<<< numAs = logData.filter(lambda s: 'a' in s).count()
<<< numBs = logData.filter(lambda s: 'b' in s).count()
<<< print "Lines with a: %i, lines with b: %i" % (numAs, numBs)
Lines with a: 62, lines with b: 30

SparkContextの例-Pythonプログラム

Pythonプログラムを使用して同じ例を実行してみましょう。 firstapp.py というPythonファイルを作成し、そのファイルに次のコードを入力します。

----------------------------------------firstapp.py---------------------------------------
from pyspark import SparkContext
logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md"
sc = SparkContext("local", "first app")
logData = sc.textFile(logFile).cache()
numAs = logData.filter(lambda s: 'a' in s).count()
numBs = logData.filter(lambda s: 'b' in s).count()
print "Lines with a: %i, lines with b: %i" % (numAs, numBs)
----------------------------------------firstapp.py---------------------------------------

次に、ターミナルで次のコマンドを実行して、このPythonファイルを実行します。 上記と同じ出力が得られます。

$SPARK_HOME/bin/spark-submit firstapp.py
Output: Lines with a: 62, lines with b: 30