2017-08-17 61 views
0

我正在pyspark開發一個spark-flask應用程序。我使用pyspark 2.20這裏是我的代碼如何解決java.sql.SQLException:無法打開測試連接到給定的數據庫。pyspark 2.2

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,username = APP。終止連接池(如果您希望在應用程序後啓動數據庫,請將lazyInit設置爲true)

這是堆棧跟蹤中嵌套的最後一個異常。原始異常爲 java.sql.SQLException:無法使用類加載器[email protected]f1b8e6啓動數據庫'metastore_db',請參閱 下一個異常詳細信息

引起:錯誤XSDB6:另一個Derby實例可能已經引導了數據庫C:\ spark \ metastore_db。

我已經從metastore_db文件夾刪除了db.lck文件,但沒有任何更改。我之前使用過這個技巧來解決最後兩個異常。但沒有面對

java.sql.SQLException:無法打開到給定數據庫的測試連接。 JDBC url = jdbc:derby:; databaseName = metastore_db; create = true,username = 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版本現在是星火會議風格的代碼

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() 

堆棧跟蹤圖像

enter image description here

enter image description here enter image description here

回答

0

你metastore已經某處使用。因此,您必須從您的Metastore文件夾中刪除* .lck文件(C:spark \ metastore_db)。

+0

我確實刪除了它。大聲笑這是老招。但現在沒有變化:D – Kalyan

相關問題