2017-08-16 108 views
1

Apache Livy文檔稀少:是否可以使用Apache Livy將Spark SQL查詢結果集作爲REST調用返回?調用應用程序是移動的,它不能使用odbc/jdbc連接。所以Spark Thriftserver不是一個選項。Apache Livy:通過REST查詢Spark SQL:可能嗎?

+0

是有可能通過使用李維火花SQL查詢,但它不是POS sible目前發佈純SQL。 SQL需要用Python,scala或java包裝。 Livy結果可以使用相對未記錄的功能格式化爲JSON格式。當我回到筆記本電腦上時,我會提供更好的答案:) – Garren

回答

0

是的,可以通過Livy提交Spark SQL查詢。但是,目前不支持自己提交的查詢。他們需要用Python或Scala代碼打包。

下面是使用Python經由請求lib和Scala代碼與李維交互執行火花SQL查詢作爲字符串爲「火花」被執行的兩個例子:使用在李維%JSON魔

1)(https://github.com/apache/incubator-livy/blob/412ccc8fcf96854fedbe76af8e5a6fec2c542d25/repl/src/test/scala/org/apache/livy/repl/PythonInterpreterSpec.scala#L91

session_url = host + "/sessions/1" 
statements_url = session_url + '/statements' 
data = { 
     'code': textwrap.dedent("""\ 
     val d = spark.sql("SELECT COUNT(DISTINCT food_item) FROM food_item_tbl") 
     val e = d.collect 
     %json e 
     """)} 
r = requests.post(statements_url, data=json.dumps(data), headers=headers) 
print r.json() 

2)使用李維%表魔(https://github.com/apache/incubator-livy/blob/412ccc8fcf96854fedbe76af8e5a6fec2c542d25/repl/src/test/scala/org/apache/livy/repl/PythonInterpreterSpec.scala#L105

session_url = host + "/sessions/21" 
statements_url = session_url + '/statements' 
data = { 
     'code': textwrap.dedent("""\ 
     val x = List((1, "a", 0.12), (3, "b", 0.63)) 
     %table x 
     """)} 
r = requests.post(statements_url, data=json.dumps(data), headers=headers) 
print r.json()