Разбиение SQL-запросов для повышения эффективности Spark - PullRequest
0 голосов
/ 24 декабря 2018

У меня действительно большой SQL-запрос на HIVE, который нужно перенести для запуска.
Можно ли сэкономить на производительности, разделив запрос?

Комбинировано:

Dataset<Row> sqlDF = spark.sql("select c.name from order o join customer c on o.orderID=c.orderID where o.productPrice > 100");

По сравнению с:

Dataset<Row> order = spark.sql("select o.orderID from order where where o.productPrice > 100");   
Dataset<Row> customer= spark.sql("select c.orderID, c.name from customer);    
Dataset<Row> joinedTable = order.join(customer, customer("orderID"));

Использование фреймов данных уменьшитудобочитаемость, но я не уверен, как spark оптимизирует запрос.

1 Ответ

0 голосов
/ 25 декабря 2018

Учитывая, что незавершенный запрос также демонстрирует недостаточную производительность, тогда ответ - да.

Я видел Spark SQL с объединением 70 таблиц, который завершился ошибкой памяти.Разбиение его на наборы меньшего размера с кэшированием позволило впоследствии все выполнить.

Катализатор улучшается, но отстает от лучших в своем классе Оптимизаторов для традиционных РСУБД.Он или его преемники наверстают упущенное.

Те же проблемы относятся и к Oracle.

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

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