我的问题非常基础,我的代码工作正常。但我不清楚这两点:
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()
我怀疑的是,如果我使用spark-submit提交作业并创建如上所述的spark会话对象,我最终会创建两个spark会话吗?
如果有人可以向我解释使用spark-submit over step 2方法的额外优势,将会非常有帮助。如果我使用命令行中的spark-submit调用作业
,我是否需要创建spark-session对象?答案 0 :(得分:1)
当我们使用spark-submit提交任何pySpark作业时,我们需要创建spark会话对象吗?
是的,仅在shell的情况下不需要它。
我怀疑的是,如果我使用spark-submit提交工作并创造火花 会话对象如上所述我最终创建了两个spark 会话?
如果我们检查您编写的代码
spark = SparkSession \
.builder \
.enableHiveSupport() \
.config(conf=SparkConf().set("spark.driver.maxResultSize", "2g")) \
.appName("test") \
.getOrCreate()
观察getOrCreate()
,它会在任何时候只有一个 SparkSession对象(spark
)存在。
我建议在本地创建上下文/会话,并使代码纯净(不依赖于我们的其他对象来源)。