gpt4 book ai didi

apache-spark - 如何调用从 Spark 作业调用的 Web 服务?

转载 作者:行者123 更新时间:2023-12-03 17:01:52 27 4
gpt4 key购买 nike

我想调用一个 Web 服务来获取 Spark Structured Streaming 中的一些数据。是否可以?如何?

最佳答案

TL)DR 从技术上讲,是的。

然而,对于消费网络服务 Spark 流是没有必要的。 Spark 流是为订阅不断发出的数据源的长期应用程序设计的。从技术上讲,Web 服务可以通过长轮询或服务器发送的事件来发出事件。 (我认为这里不是这种情况,否则你会提到)。要在 Spark 流中使用休息服务,您需要实现 custom datasource .

正常的 Spark 作业更有意义。鉴于数据工作量证明分布式编程的复杂性。然而,这也不是很常见的情况。
Spark 用于大数据上下文,对于大数据处理,通过 http 访问数据非常慢。

该服务不是通过 http 使用休息服务,而是将数据发布到分布式队列上。然后这个队列被一个 Spark 流作业或一个普通的 Spark 批处理作业消耗。
另一种策略是将数据存储到 db 中,然后直接通过 jdbc 数据源使用它。最佳实践是将数据复制到数据湖/数据仓库(如 hive)或直接复制到分布式文件系统(如 hdfs 或 amazon s3)。

从技术上讲,仍然可以使用 spark 中的休息服务。默认的 spark api 也不提供 rest 数据源。但是有第三者implementations .

它也可以在没有自定义数据源的普通 Spark 作业中实现。
鉴于 webservice 响应适合主节点上的内存:

python 代码

data = requests.get('https://my.service.tm/api.json').json
# => [{id: 1, foo: 'bar'}, {id: 2, foo: 'baz' }]
df = spark.createDataFrame(data)
# => [Row(id=1, foo='bar'), Row(id=2, foo='baz')]

如果响应不适合内存并且这是一个分页的 api,则可以使用 n 个页面创建和 rdd,然后将页面 id 映射到其响应,并可选择将 rdd 转换为数据帧。

关于apache-spark - 如何调用从 Spark 作业调用的 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com