Как запросить два запроса параллельно, а не последовательно (for-l oop) и объединить эти результирующие кадры данных? - PullRequest
0 голосов
/ 18 апреля 2020

me используя версию spark- sql -2.4.1 с java8. В моем требовании у меня есть сценарий, в котором я дал список стран.

Для каждой страны бизнес-логика c о том, как получить фрейм данных, отличается, но выбранные столбцы одинаковы.

что-то вроде ниже:

List queries = Arrays.asList(
"select col_x , col_y, col_z from tableCustmer where country='USA' and some logic ",
"select col_x , col_y, col_z from tableCustmerTransacation where country='IND' and someother logic "
);

В нашей бизнес-логике я могу повторять каждый запрос и запускать следующую бизнес-логику c каждый раз. Но это занимает много времени.

Есть ли в любом случае, я могу выполнить каждый запрос параллельно на отдельном исполнителе?

понятно, что это можно сделать с помощью сложения / уменьшения и объединения. Но как это сделать в данном случае, используя java?

1 Ответ

1 голос
/ 18 апреля 2020

Простите за код scala, но идея очень проста:

val df1 = spark.sql("select .... (query A) ")
val df2 = spark.sql("select .... (query B) ")
val result = df1.union(df2)

И это все в принципе. Оба запроса будут выполняться параллельно. Вы можете добавить столько, сколько хотите, а не только два, и Spark будет знать, что может выполнять все эти зависимые запросы параллельно до UNION.

Очевидно, что вам нужно убедиться, что все запросы возвращают одну и ту же схему.

...