Я использую метод Python Threadpool с 10 потоками, чтобы независимо выполнять запросы улья в spark. У меня есть около 1125 запросов, которые нужно выполнить. Но я вижу, что вывод генерируется только для 850 запросов.
Мое понимание ниже
1 - Поскольку мы использовали 10 потоков в пуле, наша работа будет выполнять 10 запросов параллельно сданный момент времени. Дождитесь завершения 10 запросов, а затем запустите другой пул из 10 потоков для следующего набора запросов.
Правильно?
Вопросы -
1 - Использую ли яправильный подход с использованием Threadpool для моего варианта использования. Вариант использования - запуск независимых запросов улья в pyspark.
2 - Когда моя работа завершена, в выходной таблице я вижу только 850/1125 строк. Почему?
3 - если в пуле из 10 запросов произошел сбой одного запроса. Что произойдет? Будет ли работа продолжена со следующим набором запросов? Или это остановит исполнение
from multiprocessing.pool import ThreadPool
threading_hive = ThreadPool(10)
try:
output_map1 = threading_hive.map(executeHiveQuery,keys)
"""Example of keys - [[1,select * from table,xyz],[...],[...]]"""
except:
print("Error during query execution")
pass
finally:
threading_hive.close()
threading_hive.join()
def executeHiveQuery(x):
""" Function that take spark object and query as input and return the
output"""
"""x[1] - Is my hive query"""
query_output = spark.sql(x[1]).toJSON().collect()
return [str(x[0]),str(query_output),str(x[2])]