Использование sparklyr Я получаю доступ к таблице из Oracle через JDBC следующим образом:
tbl_sample_stuff <- spark_read_jdbc(
sc = sc,
name = "tbl_spark_some_table",
options = list(
url = "jdbc:oracle:thin:@//my.host.with.data:0000/my.host.service.details",
driver = "oracle.jdbc.OracleDriver",
user = "MY_USERNAME",
password = "SOME_PASSWORD",
# dbtable = "(SELECT * FROM TABLE WHERE FIELD > 10) ALIAS"),
dbtable = "some_table"
),
memory = FALSE
)
Таблица sample_stuff
доступно.Например, выполнение glimpse(tbl_sample_stuff)
дает требуемые результаты.
Вопросы
Допустим, я хочу получить простой счетчик для каждой группы, используя следующий код:
dta_tbl_sample_stuff_category <- tbl_sample_stuff %>%
count(category_variable) %>%
collect()
Как следствие, мой Spark 1.6.3 выполняет следующую работу:
- Что на самом деле там происходит, почему есть один
collect
Задание выполняется в течение длительного периода времени (~ 7 минут)?Я считаю, что оптимальным подходом будет сначала запустить некоторый SQL, такой как SELECT COUNT(category_variable) FROM table GROUP BY category_variable
, для этих данных, а затем собрать результаты. Мне кажется , что эта работа сначала загружает данные, а затем агрегирует, верно?
Каков оптимальный способ использования соединения JDBC через sparklyr .В частности, я хотел бы знать:
- Что мудро с точки зрения создания временных таблиц?Должен ли я всегда создавать временные таблицы для данных, которые я хочу часто анализировать?
Другие детали
Ядобавление драйвера Oracle через
configDef$sparklyr.jars.default <- ora_jar_drv
Rest - это типичное соединение с кластером Spark, управляемым на Yarn, возвращаемом как sc
объект в сеанс R.