Apache Livy文档稀疏:是否可以使用Apache Livy将Spark SQL查询结果集作为REST调用返回?调用应用程序是移动的,并且无法使用odbc / jdbc进行连接。因此,Spark Thriftserver不是一个选择。
最佳答案
是的,可以通过Livy提交Spark SQL查询。但是,[当前]不支持自行提交的查询。它们将需要用Python或Scala代码包装。
这是两个示例,这些示例使用Python通过请求lib和Scala代码作为将在“ spark中”执行的字符串与Python进行交互来执行Spark SQL查询:
1)在livy(https://github.com/apache/incubator-livy/blob/412ccc8fcf96854fedbe76af8e5a6fec2c542d25/repl/src/test/scala/org/apache/livy/repl/PythonInterpreterSpec.scala#L91)中使用%json magic
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)在livy(https://github.com/apache/incubator-livy/blob/412ccc8fcf96854fedbe76af8e5a6fec2c542d25/repl/src/test/scala/org/apache/livy/repl/PythonInterpreterSpec.scala#L105)中使用%table magic
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()
关于apache-spark - Apache Livy:通过REST查询Spark SQL:可能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45703259/