【问题标题】:closing MYSQL JDBC connection in Spark在 Spark 中关闭 MYSQL JDBC 连接
【发布时间】:2017-01-24 22:30:59
【问题描述】:

我正在通过 JDBC 将数据从 MYSQL 服务器加载到 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()。那不行。

【问题讨论】:

    标签: python mysql jdbc apache-spark pyspark


    【解决方案1】:

    这里真的没有什么可以关闭的。 DateFrame 对象不是 JDBC 连接,load 并不是真正的 load 数据。它只是获取构建DataFrame 所需的元数据。

    只有当您执行包含取决于此特定输入的任务并由相应的执行程序处理的作业时,才会进行实际的数据处理。负责管理连接和获取数据,这个过程不暴露给用户。

    【讨论】:

    • 这是否意味着我需要保持连接直到我处理数据?在 spark 中创建 df 后,在进行昂贵的计算之前如何关闭连接?
    • 你没有。这是,或者至少应该由输入格式处理。由于 Spark 不会急切地加载数据并以流方式处理记录,因此您可以看到相对较长的活动连接。此外,如果没有缓存,数据可能会被多次获取,并且缓存本身比普通 RDD 复杂得多。
    • 当我在脚本中添加耗时的进程时,我收到了 MYSQL 连接超时错误。当脚本仅用于加载和执行一些简单的数据任务时,它不存在。这就是为什么我想在创建数据框后关闭连接。
    • 我猜这是某种配置问题,但您不太可能遇到错误。一种或另一种手动关闭与 JDBC 源的连接不是一种选择。
    • @zero323 阅读更多有关 Spark 功能内部工作的建议参考资料是什么?我面临着类似的问题,我的 spark 作业从中读取的数据库限制了每个用户的最大并发连接数。火花load() 保持连接直到作业完成,即使我在作业开始时只有一个load() 调用,然后在DF 上执行复杂的转换以提醒作业。
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多