如何使用Spark RDD进行批量提交?

时间:2019-03-29 02:40:43

标签: apache-spark rdd

我有很多物品的RDD,只需简化一下即可:

// vue.config.js
module.exports = {
  configureWebpack: {
    // config goes here
  }
}

并将这些项目提交给批处理API([0,1,2,3,4,5,6,7,8,9] )。但API限制了最大批量(实验3)。 因此,为了获得最佳性能,我需要将RDD迭代器尽可能地转换为limit数组:

API.post(a[])

然后我使用Spark Java将数据推送到API。

[[0,1,2], [3,4,5], [6,7,8], [9]]

我的问题是如何进行转换?

1 个答案:

答案 0 :(得分:0)

要清楚,没有RDD迭代器,但每个分区都有一个迭代器。要访问它们,可以使用foreachPartition,然后可以使用简单的旧Java迭代器ops进行批处理迭代器。这是使用Spark Java API http://spark.apache.org/docs/2.4.0/api/java/org/apache/spark/api/java/JavaRDD.html#foreachPartition-org.apache.spark.api.java.function.VoidFunction-和Guava的解决方案:

rdd.foreachPartition(it -> 
  Iterators.partition(it, batchSize)
           .forEachRemaining(API::post));