2016-07-07 14 views
4

Ich versuche, eine Daten in MySQL Tabelle über Spark SQL einfügen.Wie fügt man Daten in RDB (MySQL) mit Spark ein?

Hier ist meine Tabelle:

CREATE TABLE images (
    id INT   NOT NULL AUTO_INCREMENT, 
    name VARCHAR(100) NOT NULL, 
    data LONGBLOB  NOT NULL 
); 

und mein Spark Code:

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

Aber ich erhalte eine Fehlermeldung:

java.lang.RuntimeException: [1.13] failure: ``table'' expected but identifier images found 
INSERT INTO images (name, data) 
      ^

Was mit meinem Code falsch?

+0

versuchen hinzufügen 'zu Ihren Spaltennamen. \ 'Bilder \ ' – CSK

Antwort

1

Endlich habe ich eine Lösung gefunden. Ich kann einen Trick verwenden, um Daten mit Spark SQL in MySQL zu speichern. Der Trick besteht darin, einen neuen Datenrahmen zu erstellen und ihn dann zu erhalten. Hier ein Beispiel:

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

Und das Modell so sein würde:

case class Image(
    id : Option[Int] = None, 
    name : String, 
    data : Array[Byte] 
) 
Verwandte Themen