【发布时间】:2017-08-17 07:08:57
【问题描述】:
我正在 pyspark 中开发一个 spark-flask 应用程序。我正在使用 pyspark 2.20 这是我的代码
import re
from tkinter import*
import json
from pyspark.sql import HiveContext
#from pyspark.sql import SparkSession
from flask import Flask
from pyspark import SparkConf,SparkContext
conf=SparkConf().setMaster('local').setAppName("TestValue")
conf.set("spark.driver.allowMultipleContexts", "true")
sc=SparkContext(conf=conf)
sqlContext=HiveContext(sc)
#from pyspark.sql import Row
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=sqlContext.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()
在这里,我编写了 sqlCONtext 样式而不是 sparksession.builder。此代码预计将根据请求返回 json 数据响应。现在我得到以下错误
java.sql.SQLException:无法打开到给定数据库的测试连接。 JDBC url = jdbc:derby:;databaseName=metastore_db;create=true, 用户名 = APP。终止连接池(如果您希望在应用之后启动数据库,请将lazyInit 设置为 true)
这是堆栈跟踪中嵌套的最后一个异常。最初的例外是 java.sql.SQLException:无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@7af1b8e6 启动数据库“metastore_db”,请参阅 下一个细节例外
原因:ERROR XSDB6:另一个 Derby 实例可能已经启动了数据库 C:\spark\metastore_db。
我已经从 metastore_db 文件夹中删除了 db.lck 文件,但没有任何改变。我以前用过这个技巧来解决最后两个异常。但没有面对
java.sql.SQLException:无法打开到给定数据库的测试连接。 JDBC url = jdbc:derby:;databaseName=metastore_db;create=true, 用户名 = APP。终止连接池(如果您希望在应用之后启动数据库,请将lazyInit 设置为 true)
到目前为止,我发现这是 spark 2.0.1、2.0.2 中的一个错误,它已在 2.1 和 2.2 版本中修复 https://issues.apache.org/jira/browse/SPARK-18687
我现在在 Windows 10 中使用 pyspark 2.2 版本
这里是 Spark session 风格的代码
from tkinter import*
from pyspark.sql import SparkSession
from flask import Flask
import json
import re
app=Flask(__name__)
spark=SparkSession.builder.config("spark.sql.warehouse.dir", "C:\spark\spark-warehouse")\
.config("spark.driver.allowMultipleContexts","true")\
.appName("TestApp").\
enableHiveSupport().getOrCreate()
#spark.conf.set("spark.driver.allowMultipleContexts","true")
#spark=SparkSession.builder.config("spark.driver.allowMultipleContexts", "true").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()
堆栈跟踪图像
【问题讨论】:
标签: apache-spark pyspark pyspark-sql