SlideShare a Scribd company logo
Бекенды dplyr
dtplyr, dbplyr, multidplyr
Алексей Селезнёв
Какие бекендымырассмотрим
• dtplyr – транслирует dplyr синтаксис в data.table
• dbplyr – бекенд для работы с базами данных
• multidplyr – многопоточный бекенд
dtplyr
Цель dtplyr —позволить вам писать код dplyr,
который автоматически транслируется в эквивалентный,
но обычно гораздо более быстрый код data.table.
Синтаксис dtplyr
• lazy_dt() – создаём объект dtplyr для ленивых вычислений
• dplyr – далее производим манипуляцию данными, используя глаголы dplyr, при этом
формируем выражение data.table для будущего вычисления
• show_query() – позволяет посмотреть, в какое выражение data.table будет преобразован код
• as.data.table()/as.data.frame()/as_tibble() – выполняет вычисление, и возвращает результат
в одном из приведённых табличных типов данных
dtplyr: основытрансляции выражений
dplyr data.table dplyr data.table
filter() / arrange() i inner_join(), right_join(),
left_join(), anti_join()
[.data.table
select(), summarise(), transmute() j full_join() merge()
mutate() j + := group_by() keyby / by
rename() setnames()
distinct() unique()
Почему dtplyr медленнее чем data.table
• dtplyr изначально преобразует вычисления в синтаксис data.table, это требует некоторых временных затрат, хоть и
незначительных (~ 1 м.сек).
• Некоторые выражения data.table не имеют прямого эквивалента dplyr. Например, с помощью dplyr нельзя выразить перекрестное
или скользящее соединение.
• Чтобы соответствовать семантике dplyr, mutate() по умолчанию не изменяет объект «на лету», а делает его копию. При
использовании data.table напрямую вы можете изменять объекты «на лету», не создавая ненужные копии.
! время выполнения dtplyr зависит от сложности конвейера, а не от размера данных, поэтому
эти временные параметры должны применяться независимо от размера базовых данных
dbplyr
Цель dbplyr —позволить вам манипулировать таблицами,
хранящимися в базах данных, так же, как если бы они были
датафреймами в среде R. Данный бекенд переводит dplyr
глаголы в SQL синтаксис.
Синтаксис dbplyr
• DBI – для инициализации подключения к базе данных
• tbl() – для подключения к таблице
• dplyr – далее производим манипуляцию данными, используя глаголы dplyr, при этом
формируем SQL запрос для будущего вычисления
• show_query() – позволяет посмотреть, в какое SQL выражение будет преобразован код
• collect() – выполняет вычисление, и возвращает
Перевод dplyr глаголов в SQL
dplyr SQL
select(), mutate() SELECT
filter() WHERE
arrange() ORDER BY
summarise() +
group_by()
GROUP BY
dplyr SQL
inner_join() SELECT * FROM x JOIN y ON x.a = y.a
left_join() SELECT * FROM x LEFT JOIN y ON x.a = y.a
right_join() SELECT * FROM x RIGHT JOIN y ON x.a = y.a
full_join() SELECT * FROM x FULL JOIN y ON x.a = y.a
semi_join() SELECT * FROM x WHERE EXISTS (SELECT 1FROM y WHERE x.a = y.a)
anti_join() SELECT * FROM x WHERE NOT EXISTS (SELECT 1FROM y WHERE x.a = y.a)
intersect(x, y) SELECT * FROM x INTERSECT SELECT * FROM y
union(x, y) SELECT * FROM x UNION SELECT * FROM y
setdiff(x, y) SELECT * FROM x EXCEPT SELECT * FROM y
Перевод функций внутри dplyr глаголов
multidplyr
multidplyr —позволить вам разделить данные с помощью
partition(), затем данные остаются на каждом узле до тех
пор, пока вы явно не извлечете их с помощью collect().
Вариантыразбиения данных на кластера
• Разбиение уже существующей в памяти таблицы на кластера с помощью partition()
• Загрузка разных частей данных в различные кластера.
Что выбрать dtplyr или multidplyr
На данных среднего объёма
предпочтительнее использовать dtplyr,
если ваши насчитывают более 10 млн наблюдений,
то возможно более производительным будет multidplyr.
СПАСИБО ЗА ВНИМАНИЕ

More Related Content

Similar to Бекенды dplyr

Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
0044
00440044
0044JIuc
 
15 - Базы данных. Создание и сопровождение таблиц
15 - Базы данных. Создание и сопровождение таблиц15 - Базы данных. Создание и сопровождение таблиц
15 - Базы данных. Создание и сопровождение таблиц
Roman Brovko
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
Alexandre Kalendarev
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовAlex.Kolonitsky
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
Alexey Nayden
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
Web весна 2012 лекция 5
Web весна 2012 лекция 5Web весна 2012 лекция 5
Web весна 2012 лекция 5Technopark
 
0041
00410041
0041JIuc
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
Александр Брич
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Fedor Lavrentyev
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
Badoo Development
 

Similar to Бекенды dplyr (20)

Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
0044
00440044
0044
 
15 - Базы данных. Создание и сопровождение таблиц
15 - Базы данных. Создание и сопровождение таблиц15 - Базы данных. Создание и сопровождение таблиц
15 - Базы данных. Создание и сопровождение таблиц
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Управление данными (sql)
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросов
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
Web весна 2012 лекция 5
Web весна 2012 лекция 5Web весна 2012 лекция 5
Web весна 2012 лекция 5
 
0041
00410041
0041
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Tfs reports customization
Tfs reports customizationTfs reports customization
Tfs reports customization
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
 
DBIx Class
DBIx ClassDBIx Class
DBIx Class
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 

More from Алексей Селезнёв

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Алексей Селезнёв
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
Алексей Селезнёв
 
gargle.pdf
gargle.pdfgargle.pdf
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
Алексей Селезнёв
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
Алексей Селезнёв
 
10.website.pdf
10.website.pdf10.website.pdf
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
function_docs.pdf
function_docs.pdffunction_docs.pdf
07-testing.pdf
07-testing.pdf07-testing.pdf
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
Алексей Селезнёв
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
Алексей Селезнёв
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
Алексей Селезнёв
 
Пакет future
Пакет futureПакет future
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
Алексей Селезнёв
 
Пакет purrr
Пакет purrrПакет purrr
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
Алексей Селезнёв
 
Циклы в R
Циклы в RЦиклы в R

More from Алексей Селезнёв (20)

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
 
gargle.pdf
gargle.pdfgargle.pdf
gargle.pdf
 
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
 
10.website.pdf
10.website.pdf10.website.pdf
10.website.pdf
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
function_docs.pdf
function_docs.pdffunction_docs.pdf
function_docs.pdf
 
07-testing.pdf
07-testing.pdf07-testing.pdf
07-testing.pdf
 
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
6.dependecies.pdf
 
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
DESCRIPTION.pdf
 
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
3-r-code.pdf
 
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
 
Пакет future
Пакет futureПакет future
Пакет future
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Пакет purrr
Пакет purrrПакет purrr
Пакет purrr
 
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
 
Циклы в R
Циклы в RЦиклы в R
Циклы в R
 

Бекенды dplyr

  • 1. Бекенды dplyr dtplyr, dbplyr, multidplyr Алексей Селезнёв
  • 2. Какие бекендымырассмотрим • dtplyr – транслирует dplyr синтаксис в data.table • dbplyr – бекенд для работы с базами данных • multidplyr – многопоточный бекенд
  • 3. dtplyr Цель dtplyr —позволить вам писать код dplyr, который автоматически транслируется в эквивалентный, но обычно гораздо более быстрый код data.table.
  • 4. Синтаксис dtplyr • lazy_dt() – создаём объект dtplyr для ленивых вычислений • dplyr – далее производим манипуляцию данными, используя глаголы dplyr, при этом формируем выражение data.table для будущего вычисления • show_query() – позволяет посмотреть, в какое выражение data.table будет преобразован код • as.data.table()/as.data.frame()/as_tibble() – выполняет вычисление, и возвращает результат в одном из приведённых табличных типов данных
  • 5. dtplyr: основытрансляции выражений dplyr data.table dplyr data.table filter() / arrange() i inner_join(), right_join(), left_join(), anti_join() [.data.table select(), summarise(), transmute() j full_join() merge() mutate() j + := group_by() keyby / by rename() setnames() distinct() unique()
  • 6. Почему dtplyr медленнее чем data.table • dtplyr изначально преобразует вычисления в синтаксис data.table, это требует некоторых временных затрат, хоть и незначительных (~ 1 м.сек). • Некоторые выражения data.table не имеют прямого эквивалента dplyr. Например, с помощью dplyr нельзя выразить перекрестное или скользящее соединение. • Чтобы соответствовать семантике dplyr, mutate() по умолчанию не изменяет объект «на лету», а делает его копию. При использовании data.table напрямую вы можете изменять объекты «на лету», не создавая ненужные копии. ! время выполнения dtplyr зависит от сложности конвейера, а не от размера данных, поэтому эти временные параметры должны применяться независимо от размера базовых данных
  • 7. dbplyr Цель dbplyr —позволить вам манипулировать таблицами, хранящимися в базах данных, так же, как если бы они были датафреймами в среде R. Данный бекенд переводит dplyr глаголы в SQL синтаксис.
  • 8. Синтаксис dbplyr • DBI – для инициализации подключения к базе данных • tbl() – для подключения к таблице • dplyr – далее производим манипуляцию данными, используя глаголы dplyr, при этом формируем SQL запрос для будущего вычисления • show_query() – позволяет посмотреть, в какое SQL выражение будет преобразован код • collect() – выполняет вычисление, и возвращает
  • 9. Перевод dplyr глаголов в SQL dplyr SQL select(), mutate() SELECT filter() WHERE arrange() ORDER BY summarise() + group_by() GROUP BY dplyr SQL inner_join() SELECT * FROM x JOIN y ON x.a = y.a left_join() SELECT * FROM x LEFT JOIN y ON x.a = y.a right_join() SELECT * FROM x RIGHT JOIN y ON x.a = y.a full_join() SELECT * FROM x FULL JOIN y ON x.a = y.a semi_join() SELECT * FROM x WHERE EXISTS (SELECT 1FROM y WHERE x.a = y.a) anti_join() SELECT * FROM x WHERE NOT EXISTS (SELECT 1FROM y WHERE x.a = y.a) intersect(x, y) SELECT * FROM x INTERSECT SELECT * FROM y union(x, y) SELECT * FROM x UNION SELECT * FROM y setdiff(x, y) SELECT * FROM x EXCEPT SELECT * FROM y
  • 11. multidplyr multidplyr —позволить вам разделить данные с помощью partition(), затем данные остаются на каждом узле до тех пор, пока вы явно не извлечете их с помощью collect().
  • 12. Вариантыразбиения данных на кластера • Разбиение уже существующей в памяти таблицы на кластера с помощью partition() • Загрузка разных частей данных в различные кластера.
  • 13. Что выбрать dtplyr или multidplyr На данных среднего объёма предпочтительнее использовать dtplyr, если ваши насчитывают более 10 млн наблюдений, то возможно более производительным будет multidplyr.