Apache Livy:通过 REST 查询 Spark SQL:可能吗?

2023-12-03

apache Livy 文档很少:是否可以使用 Apache Livy 将 Spark SQL 查询结果集作为 REST 调用返回?调用应用程序是移动的,它无法使用 odbc/jdbc 进行连接。所以 Spark thriftserver 不是一个选择。


是的,可以通过 Livy 提交 Spark SQL 查询。但是,[目前]不支持自行提交查询。它们需要用 Python 或 Scala 代码包装。

以下是使用 Python 执行 Spark SQL 查询的两个示例,通过 requests lib 与 Livy 进行交互,Scala 代码作为要在“spark”中执行的字符串:

1)在livy中使用%json魔法(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)在livy中使用%table魔法(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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Livy:通过 REST 查询 Spark SQL:可能吗? 的相关文章

随机推荐