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

问题描述 投票:1回答:2

我想调用Web服务来获取Spark结构化流中的一些数据。可能吗?怎么样?

apache-spark apache-spark-sql spark-structured-streaming
2个回答
1
投票

TL)DR从技术上讲,是。

但是,使用网络服务不需要火花流。 Spark流是为需要持续发送数据源的长期应用程序而设计的。从技术上讲,Web服务可以通过长时间轮询或服务器发送的事件来发送事件。 (我认为这里不是这种情况,否则您会提到)。要在Spark Streaming中使用休息服务,您需要实现custom datasource

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

而不是通过http来使用rest服务,该服务将在分布式队列上发布数据。然后,该队列被火花流作业或常规火花批处理作业消耗。另一种策略是将数据存储到db中,然后直接通过jdbc数据源使用它。最佳实践是将数据复制到像蜂巢这样的数据湖/数据仓库,或者直接复制到像hdfs或amazon s3这样的分布式文件系统。

仍然可以在技术上消耗休息服务。默认的spark api也不提供rest数据源。但是,有第三方implementations

也可以在常规的火花作业中实现,而无需自定义数据搜索。给定websevice响应适合主节点上的内存:

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转换为数据帧。


0
投票

可以从Spark作业调用Web服务吗?

当然。可以将Spark视为一种分布式计算引擎,其中的计算是“调用Web服务”。计算将在执行程序上执行,并且可能有成千上万的计算大规模调用Web服务。

您可以考虑将JDBC数据源用作另一个Web服务,不是吗?对于JDBC,Spark随附JDBC data source。这可能是数据源调用Web服务的基础。

© www.soinside.com 2019 - 2024. All rights reserved.