我正在尝试通过Spark SQL将数据插入MySQL表.
这是我的表:
CREATE TABLE images (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
data LONGBLOB NOT NULL
);
和我的Spark代码:
case class Image(name: String, data: Array[Byte])
def saveImage(image: Image): Unit = {
sqlContext.sql(s"""INSERT INTO images (name, data) VALUES ('${image.name}', ${image.data});""".stripMargin)
}
但是我收到一个错误:
java.lang.RuntimeException: [1.13] failure: ``table'' expected but identifier images found
INSERT INTO images (name, data)
^
我的代码出了什么问题?
解决方法:
最后,我找到了解决方案.我可以使用技巧使用Spark SQL将数据保存到MySQL中.诀窍是创建一个新的DataFrame,然后继续它.这是一个例子:
def saveImage(image: Image): Unit = {
val df = sqlContext.createDataFrame {
sc.parallelize(
Image(
name = image.name,
data = image.data
) :: Nil
)
}
JdbcUtils.saveTable(df, url, "images", props)
}
而模型将是这样的:
case class Image(
id : Option[Int] = None,
name : String,
data : Array[Byte]
)
标签:mysql,sql,scala,apache-spark,apache-spark-sql
来源: https://codeday.me/bug/20190702/1353690.html