scala - 如何在 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
有可能以干净的方式吗?
解决方案
目前不可能以干净的方式进行;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 使用它。
推荐阅读
- javascript - 如何将音频 Blob 传递给 Django 后端和服务器?
- c# - WPF 自定义控件和绑定属性
- php - 'confirmationKey' 在注册用户时没有默认值
- r - R序列到序列预测
- c++ - 使用带比较结构的 lower_bound 将对象插入向量
- php - 如何计算过去 30 天内称为订单的行并总结该订单的价格?
- php - 如何修复 WAMP 中的 MySQL 和 PHP 不插入数据?
- javascript - 带有 API 调用的 ReactJS 保护路由
- regex - 我怎样才能将这个术语限制为 3 件命中?
- android - 如何修复在 OnCreateView() 中变为 null 的 List<>