apache spark中的批处理API调用?

Gre*_*orn 5 apache-spark

我是Apache Spark的初学者,确实有以下任务:

我正在从数据源读取记录,在Spark转换中,需要通过调用外部Web服务来增强数据,然后才能对其进行进一步处理。

该Web服务将在一定程度上接受并行调用,但一次只允许发送几百条记录。而且,它非常慢,因此尽可能多地进行批处理和并行请求无疑在这里有所帮助。

有没有办法以合理的方式做到这一点?

我想到了读取记录,将它们预处理到另一个数据源,然后一次读取“ API-Queue”数据源500条记录(如果可能的话,可以使用多个进程),然后将记录写入下一个数据源,并使用此结果数据源做最后的转变。

在API调用中,唯一需要遵守这些怪异限制的地方(这就是为什么我认为某些中间数据格式/数据源将是合适的)。

您有什么要向我指出的想法或方向吗?

小智 7

您可以使用 mapPartition 执行此操作,请参阅此问题:

在 Spark MapTask 中调用 http 请求和读取输入流的有效方法是什么

mapPartition 每个分区运行一次,因此您可以运行一次安装/拆卸代码。在 mapPartition 之前进行合并以将分区数量减少到 Web 服务可以轻松支持的并发级别。

您可能希望首先对 RDD 进行排序以避免为给定的键多次调用 web 服务,适当地对 mapPartition 进行编码以避免重复点击相同的键。


hui*_*ker 6

如果您在 RDD 处理中调用外部 API,则每个 Spark 执行器都会并行执行该调用。如果您考虑一下,这就是您想要快速处理数据的方式。

如果你想补偿你这边API的迟钝,你可以在你这边安装一个缓存服务器来处理重复的请求,比如memcache,例如:http : //memcached.org/