如何使用Spark将数据插入RDB(MySQL)中?

如何使用Spark将数据插入RDB(MySQL)中?,mysql,sql,scala,apache-spark,apache-spark-sql,Mysql,Sql,Scala,Apache Spark,Apache Spark Sql,我正试图通过sparksql将数据插入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

我正试图通过
sparksql
将数据插入
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)
            ^

我的代码出了什么问题?

最后,我找到了一个解决方案。我可以使用sparksql将数据保存到MySQL中。诀窍是创建一个新的数据帧,然后将其持久化。以下是一个例子:

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]
)

尝试将`添加到您的列名中`图像`