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

时间:2016-07-07 20:13:57

标签: mysql sql scala apache-spark apache-spark-sql

我正在尝试通过MySQL将数据插入Spark SQL表。

这是我的表:

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

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

最后,我找到了解决方案。我可以使用技巧使用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]
)