Какова роль функции tbl()
здесь
Это общий c метод, используемый для извлечения таблицы из внешнего источника.
Поскольку sparklyr
ведет себя эффективно, как соединение с базой данных, он будет следовать стандартному пути dbplyr
, вызывая dblyr::tbl_sql
, основная обязанность которого состоит в том, чтобы подготовить структуру данных, представляющую (ленивый) источник данных, и решить схема, вызывая соответствующую реализацию db_query_fields
.
Последняя часть в значительной степени является единственным компонентом Spark-Speci c, который на данный момент реализован , как показано ниже
#' @export
#' @importFrom dplyr db_query_fields
#' @importFrom dplyr sql_select
#' @importFrom dplyr sql_subquery
#' @keywords internal
db_query_fields.spark_connection <- function(con, sql, ...) {
sqlFields <- sql_select(
con,
sql("*"),
sql_subquery(con, sql),
where = sql("0 = 1")
)
hive_context(con) %>%
invoke("sql", as.character(sqlFields)) %>%
invoke("schema") %>%
invoke("fieldNames") %>%
as.character()
}
Как видите, здесь мало что происходит, и здесь не о чем беспокоиться.
В любом случае невозможно дать один ответ. sparklyr
Выбор дизайна: eageri sh (показывая пользователю частичный вывод), а также активное кэширование, используемое во всем пакете, может иметь неожиданные последствия.
Кроме того, Spark SQL не требует особых усилий, и различные типы операций сами по себе могут привести к частичной оценке.
Однако использование tbl
здесь не ухудшает ваш код чем использовать my_table
напрямую.