Znalazłem to tutaj Zbiorcza migracja danych przez Spark SQL
Parametr dbname może być dowolnym zapytaniem ujętym w nawiasy z aliasem. Więc w moim przypadku muszę to zrobić:
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()
Zgodnie z oczekiwaniami ładowanie każdej tabeli jako własnej Dataframe i łączenie ich w Spark było bardzo nieefektywne.