如果通过spark submit提交作业,是否可以使用spark会话对象而不显式创建它

sg3maiej  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(338)

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

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

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

2) 另一种方法是不使用spark submit,我可以编写python代码来生成spark会话对象并像这样使用它

我的疑问是,如果我使用spark submit提交作业并创建spark session对象(如上所述),那么我是否会创建两个spark session?
如果有人能向我解释一下使用spark submit而不是step2方法的额外优势,那将非常有帮助。如果使用spark submit从命令行调用job,是否需要创建spark会话对象

ogq8wdun

ogq8wdun1#

当我们使用spark submit提交任何pyspark作业时,我们需要创建spark会话对象吗?
是的,不仅仅是在炮弹的情况下才需要。
我的疑问是,如果我使用spark submit提交作业并创建spark session对象(如上所述),那么我是否会创建两个spark session?

tl、dr;不

如果我们检查一下你写的代码

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

观察 getOrCreate() ,它将在任何时候只处理一个sparksession对象( spark )存在。
我建议在本地创建上下文/会话,并使代码纯粹(因为不依赖于对象的其他源代码)。

相关问题