Можем ли мы использовать объект искрового сеанса без его явного создания, если отправить задание с помощью spark-submit

Мой вопрос очень простой, мой код работает нормально. Но мне не ясны эти два момента:

1) когда мы отправляем любое задание pyspark с помощью spark-submit, нужно ли нам создавать объект сеанса spark, подобный этому? в моем сценарии:

from pyspark.sql import SparkSession,SQLContext
from pyspark.conf import SparkConf
spark = SparkSession \
    .builder \
    .enableHiveSupport() \
    .appName("test") \
    .getOrCreate()
print(spark)
sqlContext = SQLContext(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, как указано выше, я закончу тем, что создам два сеанса spark?

Было бы очень полезно, если бы кто-нибудь объяснил мне дополнительное преимущество использования spark-submit по сравнению с методом шага 2. И нужно ли мне создавать объект spark-session, если я вызываю задание с помощью spark-submit из командной строки?


person user07    schedule 12.09.2017    source источник
comment
Я не понял шаг 2. Можете ли вы объяснить это? Как бы вы использовали этот сценарий?   -  person mrsrinivas    schedule 12.09.2017
comment
как это, вероятно, stackoverflow.com/questions/41926219/   -  person user07    schedule 12.09.2017
comment
Здравствуйте, если приведенный ниже ответ решил вашу проблему, рассмотрите возможность принять его или добавить собственное решение. Таким образом, это показывает более широкому сообществу, что вы нашли решение.   -  person mrsrinivas    schedule 07.10.2017
comment
Привет, ответ ниже развеял некоторые мои сомнения, но мне нужно немного больше тестов, прежде чем я подтвержу.   -  person user07    schedule 09.10.2017


Ответы (1)


Когда мы отправляем любое задание pySpark с помощью spark-submit, нужно ли нам создавать объект сеанса spark?

Да Не нужен только в случае шеллов.

Я сомневаюсь, что если я отправлю задание с помощью spark-submit и создам объект сеанса spark, как указано выше, я закончу тем, что создам два сеанса spark?

TL,DR; No

Если мы проверим код, который вы написали

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

Обратите внимание на getOrCreate(), он позаботится о том, чтобы в любое время существовал только один объект SparkSession (spark).

Я бы рекомендовал создать контекст/сеанс локально и сделать код чистым (поскольку не зависит от других наших источников для объекта).

person mrsrinivas    schedule 12.09.2017