私はsparkアプリケーションをDashDBに接続しようとしています。現在、私は自分のデータをうまく読み込むことができます。Spark JDBCとCLOBエラーのDashDB(DB2)
ただし、DataFrameをDashDBに保存できません。
洞察力が役立ちます。
var jdbcSets = sqlContext.read.format("jdbc").options(Map("url" -> url, "driver" -> driver, "dbtable" -> "setsrankval")).load()
jdbcSets.registerTempTable("setsOpponentRanked")
jdbcSets = jdbcSets.coalesce(10)
sqlContext.cacheTable("setsOpponentRanked")
私は大規模なデータフレームを保存しようとすると、しかし、私はエラーを取得:
DB2 SQLエラー:SQLCODE = -1666、SQLSTATE = 42613、SQLERRMCは= CLOB、DRIVER = 4.19.26次のように
私はデータを保存するために使用するコードは次のとおりです。
val writeproperties = new Properties()
writeproperties.setProperty("user", "dashXXXX")
writeproperties.setProperty("password", "XXXXXX")
writeproperties.setProperty("rowId", "false")
writeproperties.setProperty("driver", "com.ibm.db2.jcc.DB2Driver")
results.write.mode(SaveMode.Overwrite).jdbc(writeurl, "players_stat_temp", writeproperties)
サンプルテストデータセットはここで見ることができます:
0123私は、JDBC DB2Dialectを見てStringTypeのコードはCLOBにマッピングされることを参照しているroot
|-- PLAYER: string (nullable = true)
|-- set01: string (nullable = true)
|-- set02: string (nullable = true)
|-- set12: string (nullable = true)
|-- set01weakseed: string (nullable = true)
|-- set01medseed: string (nullable = true)
|-- set01strongseed: string (nullable = true)
|-- set02weakseed: string (nullable = true)
|-- set02medseed: string (nullable = true)
|-- set02strongseed: string (nullable = true)
|-- set12weakseed: string (nullable = true)
|-- set12medseed: string (nullable = true)
|-- set12strongseed: string (nullable = true)
|-- set01weakrank: string (nullable = true)
|-- set01medrank: string (nullable = true)
|-- set01strongrank: string (nullable = true)
|-- set02weakrank: string (nullable = true)
|-- set02medrank: string (nullable = true)
|-- set02strongrank: string (nullable = true)
|-- set12weakrank: string (nullable = true)
|-- set12medrank: string (nullable = true)
|-- set12strongrank: string (nullable = true)
|-- minibreak: string (nullable = true)
|-- minibreakweakseed: string (nullable = true)
|-- minibreakmedseed: string (nullable = true)
|-- minibreakstrongseed: string (nullable = true)
|-- minibreakweakrank: string (nullable = true)
|-- minibreakmedrank: string (nullable = true)
|-- minibreakstrongrank: string (nullable = true)
次のよう
println("Test set: "+results.first())
Test set: ['Damir DZUMHUR','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test','test',null,null,null,null,null,null,null]
データフレームスキーマです。
private object DB2CustomDialect 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(10000)", java.sql.Types.VARCHAR))
case BooleanType => Option(JdbcType("CHAR(1)", java.sql.Types.CHAR))
case _ => None
}
}
私はまったく同じ問題を抱えていますが、私はPySparkを使用しています。これをどうすれば解決できますか? –
PixidustのScalaブリッジ機能を使用して、PySparkノートブックでもこの修正を適用することができます。私はここでサンプルのノートにリンクしている問題と解決策に関するブログ記事を書いています:http://datascience.ibm.com/blog/working-with-dashdb-in-data-science-experience/ –
私はこれを見ました記事の前に、私は実際にノートブック/ DSXではなくIBMのスパーク送信を使用しています。あなたは私のスクリプトをローカルで修正してからSpark Clusterに提出する必要があると言っていますか? Spark Clusterは、管理されたサービスであるため、これらの依存関係はすべてインストールされますか? –