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.6Spark 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方言

注册永久 JDBC 方言 sparkR

任何方式使用@Formula或@CustomTransformer注释中的方言中定义的自定义函数

带有 Sybase 方言的 JDBC 嵌入式数据库