通过 RESTful API 查询 SPARK 作业产生的数据

Posted

技术标签:

【中文标题】通过 RESTful API 查询 SPARK 作业产生的数据【英文标题】:Querying data produced by SPARK job via RESTful API 【发布时间】:2017-10-11 12:46:56 【问题描述】:

我对火花很陌生。我使用 SPARK 作业生成了一个包含大约 420 mb 数据的文件。我有一个 Java 应用程序,它只需要根据某些条件从该文件中同时查询数据并以 json 格式返回数据。 到目前为止,我已经为 SPARK 找到了两个 RESTful API,但它们仅用于远程提交 SPARK 作业和管理 SPARK 上下文,

1)Livy
2)Spark job-server

如果可用,还有哪些其他选项可以做同样的事情(数据库除外)?

【问题讨论】:

【参考方案1】:

您实际上可以使用 Livy 以 RESTful 方式将结果返回为友好的 JSON!

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

我的参考答案:Apache Livy: query Spark SQL via REST: possible?

相关:Livy Server: return a dataframe as JSON?

【讨论】:

谢谢加伦。在这种方法中创建 json 是否有任何大小或长度限制,可以发送回应用程序 我不知道是否有大小限制,但是有一些固有的限制,因为它必须将结果“收集”回驱动程序。如果您有时间等待它构建并返回一百万行结果,它可能会强制执行 ;) 我在postman 的请求正文中以 "code":"textwrap.dedent(\"\"\" val d = spark.sql(\"SELECT COUNT(DISTINCT food_item) FROM food_item_tbl\") val e = d.collect \%json e \"\"\") 发布数据。它不起作用。我在这里遗漏了什么 @UtkarshSaraf 我不知道。您能否就错误和任何其他信息提出这个问题?

以上是关于通过 RESTful API 查询 SPARK 作业产生的数据的主要内容,如果未能解决你的问题,请参考以下文章

API 如何在 RSA Archer 中工作?

设计带有一长串查询参数的 RESTful 查询 API [关闭]

Postman如何通过xmysql工具的Restful API 接口访问MySQL

Restful API 设计参考原则

如何为 RESTful API 实现查询字符串参数

java 使用Virtuoso的RESTful API来回答Java中的SPARQL查询