如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗

Posted

技术标签:

【中文标题】如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗【英文标题】:Can we use spark session object without explicitly creating it, if Submit a job by spark-submit 【发布时间】:2017-09-12 09:52:34 【问题描述】:

我的问题非常基本,我的代码运行良好。但我不清楚这两点:

1) 当我们使用 spark-submit 提交任何 pyspark 作业时,我们是否需要像这样创建 spark session 对象?在我的脚本中:

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

或者我可以直接在我的脚本中访问 spark session 对象而不用创建它。

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 比第 2 步方法增加的优势,那将非常有帮助。如果我从命令行使用 spark-submit 调用作业,是否需要创建 spark-session 对象

【问题讨论】:

我不明白第 2 步。你能解释一下吗?您将如何使用该脚本? 这样可能***.com/questions/41926219/… 您好,如果以下答案解决了您的问题,请考虑accepting it 或添加您自己的解决方案。因此,它向更广泛的社区表明您已经找到了解决方案。 嗨,下面的答案已经消除了我的一些疑虑,但在我确认之前我需要进行更多测试。 【参考方案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 Object (spark) 存在。

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

【讨论】:

以上是关于如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗的主要内容,如果未能解决你的问题,请参考以下文章

提交Spark作业 | 科学设定spark-submit参数

使用 Shell 脚本文件提交 Spark 作业

提交火花作业时获取 java.lang.NoSuchMethodError

提交 pyspark 作业时出现语法错误

spark-submit参数

抛开spark-submit脚本提交spark程序