È possibile leggere dati da Microsoft Sql Server (e oracle, mysql, ecc.) In un rdd in un'applicazione Spark? O abbiamo bisogno di creare un set di memoria e metterlo in parallelo in un RDD?Lettura di dati da SQL Server utilizzando Spark SQL
risposta
Trovato una soluzione a questo dalla mailing list. JdbcRDD può essere utilizzato per realizzare questo. Avevo bisogno di ottenere il jar del driver JDBC di MS Sql Server e aggiungerlo alla libreria lib per il mio progetto. Volevo usare la sicurezza integrata, e quindi avevo bisogno di mettere sqljdbc_auth.dll (disponibile nello stesso download) in una posizione che java.library.path possa vedere. Quindi, il codice simile a questo:
val rdd = new JdbcRDD[Email](sc,
() => {DriverManager.getConnection(
"jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;")},
"SELECT * FROM TABLE_NAME Where ? < X and X < ?",
1, 100000, 1000,
(r:ResultSet) => { SomeClass(r.getString("Col1"),
r.getString("Col2"), r.getString("Col3")) })
Questo dà un DDR di SomeClass.The secondo, terzo e quarto parametro Sono necessari per limiti inferiore e superiore, e il numero di partizioni. In altre parole, i dati sorgente devono essere partizionabili in base al tempo necessario affinché funzioni.
In Spark 1.4.0+ è ora possibile utilizzare sqlContext.read.jdbc
che vi darà un dataframe invece di un RDD di Row oggetti.
L'equivalente alla soluzione che hai postato sopra sarebbe
sqlContext.read.jdbc("jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;", "TABLE_NAME", "id", 1, 100000, 1000, new java.util.Properties)
Dovrebbe prendere lo schema della tabella, ma se vuoi per forzarlo, è possibile utilizzare il metodo dello schema dopo leggi sqlContext.read.schema(...insert schema here...).jdbc(...rest of the things...)
Nota che non otterrai un RDD di SomeClass qui (che è più bello a mio avviso). Invece otterrai un DataFrame dei campi pertinenti.
Maggiori informazioni si possono trovare qui: http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases
questo sta andando essere senza risposta certa: P – khandelwaldeval
sembra così ... qualsiasi motivo? se può cancellare dati da tutto, perché non i negozi più comuni? – ashic
dovrai aspettare qualche giorno per ottenere questa risposta, poiché il tag apache-spark' è usato molto solennemente. Aspetta un paio di giorni che i ragazzi dell'apache rispondano alla tua domanda. – khandelwaldeval