DSX PySpark 使用自定义 JDBC 方言将数据写入 dashDB
Posted
技术标签:
【中文标题】DSX PySpark 使用自定义 JDBC 方言将数据写入 dashDB【英文标题】:DSX PySpark writing data to dashDB with Custom JDBC dialect 【发布时间】:2017-01-20 15:30:06 【问题描述】:在 IBM Bluemix 中,我创建了一个 DSX PySpark notebook
,带有 Python 2.6
和 Spark 2.0
。我使用IBM dashDB
作为我的数据存储。我可以成功验证和读取表,但是当我尝试写回新表时,我遇到了与link 中描述的完全相同的问题。
要解决这个问题,suggested 使用带有 pixiedust
库的 Scala 桥注册新的自定义 dashDB JDBC 方言,但是当我在笔记本中达到该阶段时,我不断收到以下错误:
pixiedustRunner.scala:13: error: type BeanProperty is not a member of package reflect
@scala.reflect.BeanProperty
第二个链接中 PySpark 中的 scala 桥接代码:
%%scala cl=dialect global=true
import org.apache.spark.sql.jdbc._
import org.apache.spark.sql.types.StringType, BooleanType, DataType
object dashDBCustomDialect extends JdbcDialect
override def canHandle(url: String): Boolean = url.startsWith("jdbc:db2")
override def getJDBCType(dt: DataType): Option[JdbcType] = dt match
case StringType => Option(JdbcType("VARCHAR(" + maxStringColumnLength + ")", java.sql.Types.VARCHAR))
case BooleanType => Option(JdbcType("CHAR(1)", java.sql.Types.CHAR))
case _ => None
JdbcDialects.registerDialect(dashDBCustomDialect)
这里有什么问题?
【问题讨论】:
【参考方案1】:这是 PixieDust 中的一个已知问题,因为 BeanProperty 的 api 更改从 Scala 2.10 中的 scala.reflect 包移动到 Scala 2.11 中的 scala.beans 包。 很快就会提供修复,但与此同时,您可以使用使用 Scala 2.10 的 Spark 1.6 来解决此错误。
【讨论】:
【参考方案2】:仅供参考。我们还在努力使用 dashDB 的 JDBC 方言修复直接更新 DSX,这样您就不必再将其作为笔记本的一部分。该修复程序将很快发布。所以请继续关注。
【讨论】:
以上是关于DSX PySpark 使用自定义 JDBC 方言将数据写入 dashDB的主要内容,如果未能解决你的问题,请参考以下文章
DSX“帮助:找不到 IBM dashDB/DB2 的 JDBC 驱动程序。”
SpringBoot2中使用thymeleaf3自定义分页方言
flink jdbc(mysql)修改为阿里云AnalyticDB方言