DSX PySpark使用自定义JDBC方言将数据写入dashDB

时间:2017-01-20 15:30:07

标签: pyspark ibm-cloud dashdb pixiedust

在IBM Bluemix中,我创建了一个DSX PySpark notebookPython 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)

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

这是PixieDust中的一个已知问题,因为BeanProperty的api更改从Scala 2.10中的scala.reflect包转移到Scala 2.11的scala.beans包。 将很快提供修复程序,但与此同时,您可以使用使用Scala 2.10的Spark 1.6来解决此错误。

答案 1 :(得分:1)

FYI。我们还在使用针对dashDB的JDBC方言修复程序直接更新DSX,这样您就不必再将其作为笔记本的一部分。修复程序很快就会消失。所以请继续关注。