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

#1楼 票数:2

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

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

1) 在 livy 中使用 %json 魔法 ( https://github.com/apache/incubator-livy/blob/412ccc8fcf96854fedbe76af8e5a6fec2c542d25/repl/src/test/scala/org/apache/livy/repl/PythonInterpreterSpec.scala )

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/PythonInterpreterSpec105L ) 中使用 %table 魔法

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

#2楼 票数:0

如果您使用的是Livy 0.7.0或更高版本,则您实际上并不需要魔法字符串。

  1. 创建会话:
curl --location --request POST 'http://<host>:<port>/sessions' \
--header 'Content-Type: application/json' \
--data-raw '{
    "kind": "sql",
    "proxyUser": "cooL_user"
}'
  1. 运行查询:
curl --location --request POST 'http://<host>:<port>/sessions/<sessionid>/statements' \
--header 'Content-Type: application/json' \
--data-raw '{
    "code": "select 1"
}'
  1. 定期轮询结果:
curl --location --request GET http://<host>:<port>/sessions/<sessionid>/statements/0 | jq '.output.data.application/json.data' 

就是这样。 现在,您可以将此方法用于 Bash 之外的任何语言。 已经有一个名为PyLivy的 Python 库,它大致遵循了这种方法。

  ask by MarkTeehan translate from so

未解决问题?本站智能推荐:

1回复

如何为Zeppelin配置Livy/spark?

我已经用Spark成功配置了Zeppelin。 但是,我想使用多租户,为此我想用Livy和Spark配置Zeppelin。 对于Livy,我提供了以下两条路径 我可以在Zeppelin中成功运行以下命令: 但是,以下命令失败: 我看到以下错误: 我还没有为Zeppelin启
2回复

SQL查询到Py(spark)

我有以下 SQL 查询,我想将其转换为 pyspark。 我想取两列 pp 和性别并在 pyspark 中执行以下操作 我试过这个 但我不知道如何在 pyspark 中只选择 2 列并将上述 SQL 查询复制到 pyspark 提前致谢
1回复

Livy不在Hortonworks的PySpark和Spark工作

我通过livy启动了一个REST spark会话,如下所示: 但是我使用的是Hortonworks而不是Cloudera,我根据http://hortonworks.com/apache/zeppelin/#section_3配置了设置: 我最终得到了这个错误: 我怀疑我的pyspa
1回复

使用Livy作为OS用户运行spark程序

我有一个集群化集群,并且希望使用Livy以“ OS用户”的身份运行Spark程序。 使用proxyUser选项仅将YARN用户设置为proxy User,OS用户仍为Livy。 如果这不可能,那么有人可以将我指向Livy代码,在该代码中进行“火花提交”以创建新的YARN应用程序。 我可以
2回复

为什么Livy或spark-jobserver而不是简单的Web框架?

我正在Apache Spark上构建一个RESTful API。 使用spark-submit提供以下Python脚本似乎工作正常: 但谷歌搜索我看到像Livy和spark-jobserver这样的东西。 我阅读了这些项目的文档和一些教程,但我仍然没有完全理解Livy或spark-job
1回复

使用curl通过livy提交spark作业

我正在通过 Curl 在 livy (0.6.0) 会话中提交 Spark 作业作业是一个很大的 jar 文件,它扩展了作业界面,就像这样: https : //stackoverflow.com/a/49220879/8557851 实际上,在使用此 curl 命令运行此代码时: 当涉及到代码时,
1回复

org.apache.spark.sql.AnalysisException:必须使用writeStream.start()kafka执行具有流源的查询

我想通过管道传输一个 python 机器学习文件,预测输出,然后将它附加到我的数据帧,然后保存它。 我得到的错误是:- 异常详情 Scala 代码
2回复

必填:org.apache.spark.sql.Row

我在尝试将spark数据帧的列之一从十六进制字符串转换为double时遇到问题。 我有以下代码: 我无法共享我的txs数据框的内容,但这是元数据: 但是当我运行这个我得到错误: 错误:类型不匹配; 找到:需要的MsgRow:org.apache.spark.sql.Row Ms