Написание 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 миллионов уникальных идентификаторов заказа Группируйте все различные продукты с их общим количеством и сортируйте по убыванию по названию продукта

enter image description here


в запросах Spark SQL string вы не узнаете синтаксическую ошибку до выполнения (что может быть дорогостоящим), тогда как в DataFrames синтаксические ошибки могут быть пойманы во время компиляции.