2016-09-16 2 views
0

Я загружаю данные с сервера MYSQL в Spark через JDBC, но мне нужно закрыть это соединение после загрузки данных. Каков точный синтаксис закрытия соединения?Закрытие соединения MYSQL JDBC в Spark

df_mysql = sqlContext.read.format("jdbc").options(
    url="jdbc:mysql://***/****”, 
    driver="com.mysql.jdbc.Driver", 
    dbtable="((SELECT jobid, system, FROM Jobs LIMIT 500) as T)", 
    user=“*****”, 
    password=“*****”).load() 

Я пробовал dbtable.close(). Это не работает.

ответ

3

Здесь действительно ничего не нужно закрывать. DateFrame объект не является соединением JDBC и load на самом деле не load данные. Он просто извлекает метаданные, необходимые для построения DataFrame.

Фактическая обработка данных выполняется только при выполнении задания, которое содержит задачи в зависимости от конкретного ввода и обрабатывается соответствующими исполнителями. Они отвечают за управление соединениями и выборку данных, и этот процесс не предоставляется пользователю.

+0

Означает ли это, что мне нужно поддерживать соединение до тех пор, пока я не обработаю данные? Как закрыть соединение после создания df в искровом режиме и до перехода на дорогостоящие вычисления? – user3311147

+0

У вас нет. Это или, по крайней мере, должно обрабатываться входным форматом. Поскольку Spark не загружает данные с нетерпением и обрабатывает записи потоковым способом, вы можете видеть относительно длинные живые соединения. Более того, без кэширования данные могут быть извлечены несколько раз, а само кэширование намного сложнее, чем на простых RDD. – zero323

+0

Я получаю сообщение об ошибке времени на подключение MYSQL, когда добавлял много времени в сценарий. Это было не там, когда скрипт использовался только для загрузки и выполнял некоторые простые задачи по данным. Вот почему я думал о закрытии соединения после создания dataframe. – user3311147

Смежные вопросы