Mysql
 sql >> Database >  >> RDS >> Mysql

Crea Spark Dataframe dalla query SQL

L'ho trovato qui Migrazione di massa dei dati tramite Spark SQL

Il parametro dbname può essere qualsiasi query racchiusa tra parentesi con un alias. Quindi nel mio caso, devo fare questo:

val query = """
  (select dl.DialogLineID, dlwim.Sequence, wi.WordRootID from Dialog as d
    join DialogLine as dl on dl.DialogID=d.DialogID
    join DialogLineWordInstanceMatch as dlwim on dlwim.DialogLineID=dl.DialogLineID
    join WordInstance as wi on wi.WordInstanceID=dlwim.WordInstanceID
    join WordRoot as wr on wr.WordRootID=wi.WordRootID
    where d.InSite=1 and dl.Active=1
    limit 100) foo
"""

val df = sqlContext.format("jdbc").
  option("url", "jdbc:mysql://localhost:3306/local_content").
  option("driver", "com.mysql.jdbc.Driver").
  option("useUnicode", "true").
  option("continueBatchOnError","true").
  option("useSSL", "false").
  option("user", "root").
  option("password", "").
  option("dbtable",query).
  load()

Come previsto, caricare ogni tabella come proprio Dataframe e unirli in Spark è stato molto inefficiente.