【问题标题】:How to use Spark RDD to make batch submit?如何使用 Spark RDD 进行批量提交?
【发布时间】:2019-03-29 02:40:42
【问题描述】:

我有很多项目的 RDD,只是简化它喜欢:

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

并将这些项目提交到批处理 API(API.post(a[]))。但 API 限制了最大批次(exp. 3)。 所以为了获得最佳性能,我需要将 RDD 迭代器尽可能地转换为 limit Array:

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

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

rdd.foreach(a -> { API.post(a)}

我的问题是如何改造它?

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:

    需要明确的是,没有 RDD 迭代器,而是每个分区都有一个迭代器。要访问它们,可以使用foreachPartition,然后可以使用普通的旧 Java 迭代器操作对迭代器进行批处理。这是使用 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));
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多