Apache spark apache spark内部的批处理API调用?

Apache spark apache spark内部的批处理API调用?,apache-spark,Apache Spark,我是Apache Spark的初学者,我有以下任务: 我正在从一个数据源读取记录,在spark转换中,这些记录需要通过调用外部Web服务来增强,然后才能进一步处理 webservice将在一定程度上接受并行调用,但只允许一次发送几百条记录。而且,它的速度相当慢,所以尽可能多地进行批处理和并行请求在这方面肯定有帮助 有没有办法以合理的方式使用spark实现这一点 我考虑读取记录,将它们预处理到另一个数据源,然后一次读取“API队列”数据源500条记录(如果可能的话,可以使用多个进程),并将记录写入

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

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

webservice将在一定程度上接受并行调用,但只允许一次发送几百条记录。而且,它的速度相当慢,所以尽可能多地进行批处理和并行请求在这方面肯定有帮助

有没有办法以合理的方式使用spark实现这一点

我考虑读取记录,将它们预处理到另一个数据源,然后一次读取“API队列”数据源500条记录(如果可能的话,可以使用多个进程),并将记录写入下一个数据源,然后使用此结果数据源进行最终转换

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


您有什么想法或方向想告诉我吗?

如果您在RDD处理中调用外部API,则每个Spark执行器都会并行调用。仔细想想,这正是快速处理数据所需要的

如果您想弥补API的迟钝,可以在您这边安装一个缓存服务器来处理重复请求,例如memcache,例如:

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

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


您可能希望首先对RDD进行排序,以避免对给定密钥多次调用Web服务,对mapPartition进行适当编码以避免重复命中同一个密钥。

好的,我将捕获执行器中的任何“超出请求限制”错误,并使用回退机制重试。