Как использовать Spark RDD для отправки партии? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть СДР из множества предметов, просто упростить это нравится:

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

и отправьте эти элементы в пакетный API (API.post(a[])). но API ограничивает максимальную партию (пример 3). Поэтому для лучшей производительности мне нужно преобразовать RDD-итератор в максимально допустимый массив:

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

и я использую Spark Java для передачи данных в API.

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

Мой вопрос, как это преобразовать?

1 Ответ

0 голосов
/ 29 марта 2019

Для ясности, нет итератора 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));
...