DSX PySpark записывает данные в dashDB с помощью пользовательского диалекта JDBC
В IBM Bluemix я создал DSX PySpark notebook
, с Python 2.6
а также Spark 2.0
, я использую IBM dashDB
как мое хранилище данных. Я могу успешно аутентифицировать и читать таблицы, но когда я пытался записать обратно в новую таблицу, у меня возникла та же проблема, как описано в этой ссылке.
Чтобы исправить это, было предложено зарегистрировать новый пользовательский диалект JDBC dashDB, используя мост Scala с pixiedust
библиотека, но когда я достигаю этой стадии в моем ноутбуке, я получаю следующую ошибку:
pixiedustRunner.scala:13: error: type BeanProperty is not a member of package reflect
@scala.reflect.BeanProperty
Код моста Скала в PySpark из 2-й ссылки:
%%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 ответа
Это известная проблема в PixieDust из-за изменений API для BeanProperty, которые были перемещены из пакета scala.reflect в Scala 2.10 в пакет scala.beans с Scala 2.11. Исправление будет предоставлено в ближайшее время, но тем временем вы можете обойти эту ошибку, используя Spark 1.6, который использует Scala 2.10.
FYI. Мы также работаем над обновлением DSX напрямую с помощью исправления диалекта JDBC для dashDB, чтобы вам больше не приходилось делать это как часть вашего ноутбука. Исправление выйдет в ближайшее время. Так что следите за обновлениями.