3

私の質問は非常に基本的です。私のコードは正常に動作しています。しかし、次の 2 点がよくわかりません。

1) spark-submit を使用して pyspark ジョブを送信するとき、このような spark セッション オブジェクトを作成する必要がありますか? 私のスクリプトで:

from pyspark.sql import SparkSession,SQLContext
from pyspark.conf import SparkConf
spark = SparkSession \
    .builder \
    .enableHiveSupport() \
    .appName("test") \
    .getOrCreate()
print(spark)
sqlContext = SQLContext(spark)

または、スクリプトを作成せずに、スクリプト内の spark セッション オブジェクトに直接アクセスできます。

from pyspark.sql import SparkSession,SQLContext
from pyspark.conf import SparkConf
print(spark) -- this can be ***sc*** not sure I am using spark-2
sqlContext = SQLContext(spark)

スパークセッションオブジェクトが利用可能な場合、以下のような構成プロパティを追加する方法、またはハイブサポートを有効にする方法。

spark = SparkSession \
.builder \
.enableHiveSupport() \
.config(conf=SparkConf().set("spark.driver.maxResultSize", "2g")) \
.appName("test") \
.getOrCreate() 

2) 別のアプローチは、spark-submit を使用しないことです。Python コードを記述して、spark-session オブジェクトを生成し、このように使用できます。

私の疑問は、spark-submit を使用してジョブを送信し、上記のように spark セッション オブジェクトを作成した場合、最終的に 2 つの spark セッションを作成することになりますか?

ステップ2の方法よりもspark-submitを使用することの利点を誰かが説明してくれれば、非常に役に立ちます。また、コマンド ラインから spark-submit を使用してジョブを呼び出す場合、spark-session オブジェクトを作成する必要がありますか?

4

1 に答える 1

3

spark-submit を使用して pySpark ジョブを送信するとき、spark セッション オブジェクトを作成する必要がありますか?

はい、シェルの場合のみ必要ありません。

私の疑問は、spark-submit を使用してジョブを送信し、上記のように spark セッション オブジェクトを作成すると、最終的に 2 つの spark セッションを作成することになりますか?

TL、DR; いいえ

あなたが書いたコードをチェックすると

spark = SparkSession \
  .builder \
  .enableHiveSupport() \
  .config(conf=SparkConf().set("spark.driver.maxResultSize", "2g")) \
  .appName("test") \
  .getOrCreate() 

ObservegetOrCreate()は、常に 1 つのSparkSession オブジェクト( spark) のみを処理します。

ローカルでコンテキスト/セッションを作成し、コードを純粋にすることをお勧めします(オブジェクトの他のソースに依存しないため)。

于 2017-09-12T14:45:58.410 に答える