2016-07-07 4 views
4

MySQLテーブルにデータをSpark SQL経由で挿入しようとしています。スパークを使ってRDB(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) 
      ^

私のコードが間違っていますか?

+0

があなたの列名に 'を追加してみてください。 \ 'images \' – CSK

答えて

1

最後に、解決策を見つけました。スパーク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] 
) 
関連する問題