我相信这是一个简单的SQLContext问题,但我在Spark文档或Stackoverflow中找不到答案。
我想从MySQL的SQL查询创建一个Spark Dataframe。
例如,我有一个复杂的MySQL查询:
SELECT a.X,b.Y,c.Z FROM FOO as a JOIN BAR as b ON ... JOIN ZOT as c ON ... WHERE ...
我希望得到一个包含X、Y和Z列的数据框。
我已经找到了如何将整个表加载到Spark中,并且我可以将它们全部加载,然后在那里执行连接和选择操作。但这非常低效。我只想加载由我的SQL查询生成的表。
这是我目前近似的代码,但不起作用。mysql-connector有一个“dbtable”选项,可用于加载整个表。我希望有一种指定查询的方法。
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", "").
sql(
"""
select dl.DialogLineID, dlwim.Sequence, wi.WordRootID from Dialog as d
join DialogLine as dl on dl.DialogID=d.DialogID
join DialogLineWordInstanceMatch as dlwim o n 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
"""
).load()