SPARK распараллеливание алгоритма - нетипично, как - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть требования к обработке, которые, кажется, не соответствуют хорошим вариантам использования SPARK для распараллеливания. С другой стороны, я не могу понять, как это легко сделать в SPARK.

Я ищу самый простой способ распараллелить следующую ситуацию:

  1. Дан набор из N записей типа записи A,
    1. выполняет некоторую обработку записей A, которая генерирует еще не существующий набор начальных результатов, скажем, записей J типа записи B. Тип записи B имеет аспект диапазона данных.
      1. Затем повторите процесс для набора записей A, еще не обработанных - остатков - для любых записей, созданных как часть B, но посмотрите налево и направо от записей A.
        1. Повторяйте 3, пока не будет сгенерировано новых записей.

Это может показаться странным, но это не более чем набор торговых записей и принятие решения для заданного расчетного периода Pn, если в этот период наблюдается спред быка или медведя. Как только этот начальный период найден, затем по дате до Pn и после Pn можно попытаться найти период спреда быка или медведя, который предшествует или следует за начальным периодом Pn. И так далее. Все работает правильно.

Разработанный мною алгоритм работает на вставку записей с использованием SQL и некоторых циклов. Созданные записи изначально не существуют и создаются на лету. Я посмотрел на фреймы данных и RDD, но для меня не так очевидно, как можно это сделать.

Использование SQL не такой сложный алгоритм, но вам нужно последовательно обрабатывать записи заданного логического ключа. Таким образом, это не типичный вариант использования SPARK.

Мои вопросы:

  1. Как мне достичь при наименьшем распараллеливании?
  2. Должны ли мы каким-то образом использовать mapPartitions, чтобы как минимум получить диапазоны наборов логических ключей для обработки, или это просто невозможно, учитывая вариант использования, который я пытаюсь представить? Я собираюсь попробовать это, но чувствую, что, возможно, я лаю не на том дереве. Это может быть просто цикл / в то время как в драйвере работает один поток.

В некоторых примерах запись A показана в табличном формате - в соответствии с принципами работы этого алгоритма:

         Jan   Feb   Mar   Apr   May  Jun  Jul   Aug  Sep
key X     -5    1     0    10     9    -20   0    5    7

приведет к тому, что запись B будет сгенерирована следующим образом:

key X    Jan - Feb  --> Bear
key X    Apr - Jun  --> Bull

1 Ответ

0 голосов
/ 10 июня 2018

Это относится к категории нетипичных искр. Решено с помощью цикла внутри цикла в Spark Scala, но с использованием JDBC. С таким же успехом могла бы быть программа Scala JDBC. Также вариант с foreachPartition.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...