#r #dplyr #amazon-redshift #rpostgresql
#r #dplyr #amazon-redshift #rpostgresql
Вопрос:
Я просто знаю, как подключить R к Redshift с помощью RPostgreSQL и dplyr. Но меня смущает пара вещей:
- Когда я хочу показать что-то на экране, например, head(a), где a — результат, получаемый из Redshift, это будет очень медленно. Однако, если я просто выбрал пару полей, скажем, всего 4 столбца, то это намного быстрее. Итак, как R подключает Redshift?
- Если я хочу использовать некоторые модели, например, случайный лес или обобщенный линейный, необходимо использовать as.data.frame для передачи результата во фрейм данных на моем локальном компьютере? Я пробовал. Я должен сделать это, прежде чем использовать ggplot2 для рисования диаграмм.
Ответ №1:
Вы читали виньетку dplyr о базах данных? Вы действительно должны прочитать это для получения более подробной информации.
Похоже, вы путаете соединение между R и базой данных и выполнение кода. Соединение позволяет осуществлять связь между R и базой данных — R может отправлять SQL-запросы в БД, а БД может отправлять результаты обратно. Ничего больше.
dplyr
пытается перевести некоторый код R в код SQL, чтобы SQL мог выполняться в базе данных, и вы получаете результаты без необходимости самостоятельно писать SQL. Как объясняется в виньетке, существует очень мало команд R, которые имеют доступный перевод. Основные dplyr
глаголы работают, т.Е., select
, mutate
(хотя и не с сгруппированными фреймами данных для SQLite, однако это доступно с postgres), group_by
, summarize
, arrange
, filter
. Также базовые математические функции (цитирование из виньетки):
- основные математические операторы:
, -, *, /, %%, ^
- математические функции:
abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh
- логические сравнения:
<, <=, !=, >=, >, ==, %in%
- булевы операции:
amp;, amp;amp;, |, ||, !, xor
- основные агрегации:
mean, sum, min, max, sd, var
Что-нибудь еще, и вы будете извлекать данные в R и запускать на нем команду R. В случае head()
, которого нет в списке, вы, вероятно, переносите всю таблицу в R, а затем просматриваете первые 6 строк.
Для Redshift это будет особенно медленно для широкой таблицы — Redshift использует столбчатое хранилище, поэтому есть значительные преимущества в производительности, если извлекать только нужные вам столбцы.
Кроме того, как объяснено в виньетке, dplyr
как можно дольше откладывает оценку SQL, что повышает эффективность. Предполагаемый способ получения результатов в R collect
— но as_data_frame
, похоже, он тоже работает.
Комментарии:
1. большое спасибо! Я только начал изучать это. Я даже не знаю этого документа
2.
head()
из базы данных будет удалено только 6 строк.