3

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

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 = 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-submit 调用作业,我是否需要创建 spark-session 对象

4

1 回答 1

3

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

是的,仅在贝壳的情况下才需要它。

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

TL,博士;不

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

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

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

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

于 2017-09-12T14:45:58.410 回答