какова теория подключения R к Redshift с использованием RPostgreSQL и dplyr

Я просто знаю, как подключить R к Redshift с помощью RPostgreSQL и dplyr. Но меня смущают несколько вещей:

  1. Когда я хочу показать что-то на экране, например, head(a), где a — результат, полученный из Redshift, это будет очень медленно. Однако, если я просто выбрал пару полей, скажем, всего 4 столбца, то это намного быстрее. Так как же R связывает Redshift?
  2. Если я хочу использовать некоторые модели, например случайный лес или обобщенную линейную, необходимо ли использовать as.data.frame для передачи результата во фрейм данных на моей локальной машине? Я пытался. Я должен сделать это, прежде чем использовать ggplot2 для рисования диаграмм.

person Feng Chen    schedule 11.10.2016    source источник


Ответы (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%
  • логические операции: &, &&, |, ||, !, xor
  • основные агрегаты: mean, sum, min, max, sd, var

Что-нибудь еще, и вы будете извлекать данные в R и запускать на них команду R. В случае head(), которого нет в списке, вы, вероятно, перетаскиваете всю таблицу в R, а затем просматриваете первые 6 строк.

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

Кроме того, как объясняется в виньетке, dplyr будет откладывать оценку SQL на максимально возможное время, что повышает эффективность. Предполагаемый способ принести результаты в R — collect, но ваш as_data_frame звучит так, как будто он тоже работает.

person Gregor Thomas    schedule 11.10.2016
comment
большое спасибо! Я только начал учиться этому. Я даже не знаю этого документа - person Feng Chen; 12.10.2016
comment
head() извлечет только 6 строк из базы данных. - person hadley; 13.10.2016