Общие сведения о соединении JDBC (Oracle) в Spark 1.6.3 в Sparklyr - PullRequest
1 голос
/ 05 июля 2019

Использование 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) дает требуемые результаты.

Вопросы

  1. Допустим, я хочу получить простой счетчик для каждой группы, используя следующий код:

    dta_tbl_sample_stuff_category  <- tbl_sample_stuff %>% 
        count(category_variable) %>% 
        collect()
    

    Как следствие, мой Spark 1.6.3 выполняет следующую работу: Spark Job

    • Что на самом деле там происходит, почему есть один collect Задание выполняется в течение длительного периода времени (~ 7 минут)?Я считаю, что оптимальным подходом будет сначала запустить некоторый SQL, такой как SELECT COUNT(category_variable) FROM table GROUP BY category_variable, для этих данных, а затем собрать результаты. Мне кажется , что эта работа сначала загружает данные, а затем агрегирует, верно?
  2. Каков оптимальный способ использования соединения JDBC через.В частности, я хотел бы знать:

    • Что мудро с точки зрения создания временных таблиц?Должен ли я всегда создавать временные таблицы для данных, которые я хочу часто анализировать?

Другие детали

  • Ядобавление драйвера Oracle через

    configDef$sparklyr.jars.default <- ora_jar_drv
    
  • Rest - это типичное соединение с кластером Spark, управляемым на Yarn, возвращаемом как sc объект в сеанс R.

...