我已将此问题发布为"如何解决Py4JavaError:调用None.org.apache .spark.java.javaSparkContext"。通过误解用户已将其标记为duplicate.so我再次以不同的名称发布此问题。
我正在尝试使用pyspark构建一个flask-spark应用程序。出于测试目的,我将在url中给出一个sqlstring,它将在Spark脚本中处理,并将json数据作为response返回给浏览器。这是我的代码。
import re
from tkinter import*
from pyspark.sql import SparkSession
from flask import Flask
#from pyspark import SparkConf,SparkContext
#conf=SparkConf().setMaster('local').setAppName("TestValue")
#sc=SparkContext(conf=conf)
#sqlContext=HiveContext(sc)
#from pyspark.sql import Row
import json
app=Flask(__name__)
spark=SparkSession.builder.config("spark.sql.warehouse.dir", "C:\spark\spark-warehouse").appName("TestApp").enableHiveSupport().getOrCreate()
print("Success")
#sqlstring="SELECT lflow1.LeaseType as LeaseType, lflow1.Status as Status, lflow1.Property as property, lflow1.City as City, lesflow2.DealType as DealType, lesflow2.Area as Area, lflow1.Did as DID, lesflow2.MID as MID from lflow1, lesflow2 WHERE lflow1.Did = lesflow2.MID"
@app.route('/<sqlval>')
def queryBuilder(sqlval):
df=spark.sql(sqlval)
#df.show()
resultlist = df.toJSON().collect()
dumpdata = re.sub(r"\'", "", str(resultlist))
jsondata = json.dumps(dumpdata)
#print(jsondata)
return jsondata
#return df
#queryBuilder(sqlstring)
if __name__ == '__main__':
app.run(debug = True)
master=Tk()
entryval=Entry(master)
entryval.grid(row=0,column=1)
Button(master,text='Quit',command=master.quit).grid(row=3,column=1,sticky=W,pady=50)
mainloop()
#print("Type",type(jsondata))
这里sqlstring将来自localhost中的浏览器url并访问querybuilder函数,该函数将json数据作为响应返回给浏览器。当我运行spark提交时出现此错误
py4j.protocol.Py4JJavaError:调用None.org.apache.spark.api.java.JavaSparkContext时发生错误。 :org.apache.spark.SparkException:此JVM中只能运行一个SparkContext(请参阅SPARK-2243)。要忽略此错误,请设置spark.driver.allowMultipleContexts = true。当前运行的SparkContext创建于:org.apache.spark.api.java.JavaSparkContext。(JavaSparkContext.scala:58)
我已经阅读了一些有关此事的帖子。人们使用sparksession和sqlcontext来实现结果,并且他们遇到了这个错误。专家鼓励不要同时使用两者,而是使用Sparksession或SqlContext .Spark会话提供spark 2.0或更高版本中的所有功能。我已经通过SparkSession完成了这个代码。可能我在这里缺少一些配置。请帮我弄清楚如何配置Sparksession以避免此错误。