如果通过 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参数