如果通过spark-submit提交作业,我们可以使用spark会话对象而无需显式创建它

时间:2017-09-12 09:52:35

标签: apache-spark hive pyspark apache-spark-2.0 spark-submit

我的问题非常基础,我的代码工作正常。但我不清楚这两点:

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会话对象可用,那么我如何添加如下的配置属性或如何启用配置单元支持。

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

2)另一种方法是不使用spark-submit我可以编写我的python代码来生成spark-session对象并使用它像this

我怀疑的是,如果我使用spark-submit提交作业并创建如上所述的spark会话对象,我最终会创建两个spark会话吗?

如果有人可以向我解释使用spark-submit over step 2方法的额外优势,将会非常有帮助。如果我使用命令行中的spark-submit调用作业

,我是否需要创建spark-session对象?

1 个答案:

答案 0 :(得分:1)

  

当我们使用spark-submit提交任何pySpark作业时,我们需要创建spark会话对象吗?

是的,仅在shell的情况下不需要它。

  

我怀疑的是,如果我使用spark-submit提交工作并创造火花   会话对象如上所述我最终创建了两个spark   会话

TL,DR;否

如果我们检查您编写的代码

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

观察getOrCreate(),它会在任何时候只有一个 SparkSession对象spark)存在。

我建议在本地创建上下文/会话,并使代码纯净(不依赖于我们的其他对象来源)。