微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试通过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]
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐