Написание SQL vs с использованием API Dataframe в Spark SQL
Я новая пчела в мире SQL Spark. В настоящее время я переношу код проглатывания моего приложения,который включает в себя проглатывание данных на этапе, Raw и уровне приложения в HDFS и выполнение CDC(захват данных изменений), в настоящее время это написано в запросах Hive и выполняется через Oozie. Это необходимо перенести в приложение Spark (текущая версия 1.6). Другой раздел кода будет перенесен позже.
в spark-SQL я могу создавать фреймы данных непосредственно из таблиц в Hive и просто выполняйте запросы как есть (например, sqlContext.sql ("my hive hql"). Другой способ - использовать API dataframe и переписать hql таким образом.
в чем разница в этих двух подходах?
есть ли какой-либо прирост производительности с использованием API Dataframe?
некоторые люди предположили, что есть дополнительный уровень SQL, который должен пройти Spark core engine при использовании запросов" SQL " напрямую, которые могут в какой-то степени повлиять на производительность, но я не нашел материал, подтверждающий это утверждение. Я знаю, что код будет намного компактнее с API Datafrmae, но когда у меня есть мои HQL-запросы, действительно ли стоит писать полный код в API Dataframe?
Спасибо.
2 ответов
вопрос: в чем разница в этих двух подходах? Есть ли какой-либо прирост производительности с использованием API Dataframe?
ответ :
сравнительное исследование сделано работами Хортона. источник...
Gist основан на ситуации/сценарии, каждый из которых прав. нет жесткое и быстрое правило, чтобы решить это. пожалуйста, пройдите ниже..
RDDs, фреймы данных и SparkSQL (infact 3 подхода не только 2):
в своей основе Spark работает с концепцией устойчивых распределенных наборов данных или RDD:
- Resilient-если данные в памяти потеряны, их можно воссоздать
- Distributed-неизменяемая распределенная коллекция объектов в памяти, секционированных по многим узлам данных в кластере
- Dataset-исходные данные могут быть созданы из файлов, программно, из данных в памяти или из другого RDD
DataFrames API-это платформа абстракции данных, которая организует ваши данные в именованные столбцы:
- создайте схему для данных
- концептуально эквивалентно таблице в реляционной базе данных
- может быть построен из многих источников, включая структурированные файлы данных, таблицы в улье, внешние базы данных или существующие RDDs
- обеспечивает реляционное представление данных для легкого SQL как манипуляции данными и агрегатов
- под капотом, это ряд RDD в
SparkSQL - это модуль Spark для структурированной обработки данных. Вы можете взаимодействовать с SparkSQL через:
- SQL
- API кадров данных
- API наборов данных
результаты теста:
- RDD опережают фреймы данных и SparkSQL для определенных типов обработки данных
таблицы данных и SparkSQL выполнял почти то же самое, хотя при анализе с участием агрегации и сортировки SparkSQL имел небольшое преимущество
синтаксически говоря, фреймы данных и SparkSQL гораздо более интуитивно понятны, чем использование
взял лучшее из 3 для каждого теста
времена были последовательными и не сильно различались между тестами
задания выполнялись индивидуально без других заданий бег!--2-->
случайный поиск против 1 идентификатора заказа от 9 миллионов уникальных идентификаторов заказа Группируйте все различные продукты с их общим количеством и сортируйте по убыванию по названию продукта
в запросах Spark SQL string вы не узнаете синтаксическую ошибку до выполнения (что может быть дорогостоящим), тогда как в DataFrames синтаксические ошибки могут быть пойманы во время компиляции.