Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une trame de données Spark à partir d'une requête SQL

J'ai trouvé ceci ici Migration de données en masse via Spark SQL

Le paramètre dbname peut être n'importe quelle requête entourée de parenthèses avec un alias. Donc dans mon cas, je dois faire ceci :

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

Comme prévu, charger chaque table en tant que sa propre Dataframe et les joindre dans Spark était très inefficace.