我在Spark结构化流应用程序中使用memsql-spark-connector 2.0.6。
val map: Map[String, String] = Map(
("spark.memsql.host" -> "XXX",
"spark.memsql.port" -> "3306",
"spark.memsql.user" -> "ABC",
"spark.memsql.password" -> "YYY",
"spark.memsql.defaultDatabase" -> "ZZZ")
var sbuilder = SparkSession
.builder()
.config(sConf)
.config("spark.sql.autoBroadcastJoinThreshold", "-1")
.config("spark.sql.crossJoin.enabled", "true")
map.foreach(f => {
sbuilder = sbuilder.config(f._1, f._2)
}
)
val eventsToMemSql = //readStream
eventsToMemSql.writeStream.option("checkpointLocation", "/checkpoint/events").foreachBatch{(df, batchId) => {
df.persist()
df.write.format("com.memsql.spark.connector").mode("append").save("tablename")
df.unpersist()
}}.start
我已经在sparkConf
对象中设置了memsql参数。
这给出了以下异常:
诊断:用户类抛出异常: org.apache.spark.sql.streaming.StreamingQueryException:无法创建 PoolableConnectionFactory(连接属性 “ zeroDateTimeBehavior”可接受的值为:“ CONVERT_TO_NULL”, 'EXCEPTION'或'ROUND'。值'convertToNull'是不可接受的。)
在另一个spark2.2批处理应用程序中写入成功。
此属性是在MemSqlConnectionPool.scala的源代码中设置的:
newPool.addConnectionProperty("zeroDateTimeBehavior", "convertToNull")
com.mysql.cj.conf.PropertyDefinitions中的源代码检查CONVERT_TO_NULL
请提出如何解决此异常的方法。