首页 > 解决方案 > 如何在 Spark JDBC 中设置客户端信息,就像在 Connection setClientInfo 中一样

问题描述

使用 Java/Scala java.sql.Connection 时,我可以在连接之上添加一些客户端信息例如:

  val con: Connection = DriverManager.getConnection(jdbcHelper.finalUrl, jdbcHelper.getUser, jdbcHelper.getPass)
  con.setClientInfo("ClientName", "JobAppStateManager")
  con.prepareStatement(SOME_STATEMENT) 
  .....

现在我想将我的信息添加到 Spark jdbc 连接?

 val opts =  Map(
  "url" -> finalUrl,
  "user" -> user,
  "password" -> password,
  "dbtable" -> tableName
)
val df = sqlContext.
  read.
  format("jdbc").
  options(opts).load

有可能以干净的方式吗?

标签: scalaapache-sparkjdbc

解决方案


目前不可能以干净的方式进行;spark-redshift不添加该属性: https ://github.com/databricks/spark-redshift/blob/8adfe95a25d6bbe8aedc2010a756ccf3615eab24/src/main/scala/com/databricks/spark/redshift/RedshiftJDBCWrapper.scala#L228

但是,有一个困难的解决方法:创建您自己的 JDBC 驱动程序包装器,该包装器覆盖该driver.connect(url, properties)函数以添加您想要的属性。Class.forName(my.package.Driver)然后在 Redshift 上使用 Spark 之前通过调用来告诉 spark 使用它。


推荐阅读