我的问题很基本,我的代码运行良好。但我不清楚这两点:
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会话对象
1条答案
按热度按时间ogq8wdun1#
当我们使用spark submit提交任何pyspark作业时,我们需要创建spark会话对象吗?
是的,不仅仅是在炮弹的情况下才需要。
我的疑问是,如果我使用spark submit提交作业并创建spark session对象(如上所述),那么我是否会创建两个spark session?
tl、dr;不
如果我们检查一下你写的代码
观察
getOrCreate()
,它将在任何时候只处理一个sparksession对象(spark
)存在。我建议在本地创建上下文/会话,并使代码纯粹(因为不依赖于对象的其他源代码)。