我具有创建SparkContext和SQLContext的功能。
def init_spark(query=None):
def quiet_logs( sc ):
logger = sc._jvm.org.apache.log4j
logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )
if 'sc' in locals():
sc.stop()
conf = pyspark.SparkConf()
conf.set("spark.driver.allowMultipleContexts", "true")
conf.set("es.index.auto.create", "true")
conf.set("es.nodes.discovery", "true")
conf.set("es.read.field.exclude", "data.integrations")
if query:
conf.set("es.query", query)
sc = pyspark.SparkContext(conf=conf)
quiet_logs(sc)
sqlContext = pyspark.SQLContext(sc)
return sqlContext
显然sc.stop()检查不起作用,并且我尝试在函数外部执行该操作,但仍然不起作用。
答案 0 :(得分:0)
也许看一下getOrCreate和newSession,您可以先停止当前的https://www.journaldev.com/12372/android-recyclerview-example和{{3}},然后从config创建一个新的,因此不必进行Python级别的检查。
# Stop whatever you are getting here
SparkSession.builder.getOrCreate().stop()
# New session with your config
spark = SparkSession.builder.config(conf=conf).newSession()
sc = spark.sparkContext
现在第一部分似乎效率很低(如果没有会话,它将创建一个然后杀死它),不确定它会导致多少开销。
编辑:或将sc
拉到外面,并检查是否已分配
sc = None
def init_spark(query=None):
global sc
if sc is not None:
sc.stop()
...
sc = pyspark.SparkContext(conf=conf)
...