Dav*_*lla 3 scala apache-spark
我目前正在从 Spark 查询 MySQL,如下所示:
val sqlContext = new SQLContext(sc)
val dataframe_mysql = sqlContext
.read.format("jdbc").option("driver", "com.mysql.jdbc.Driver")
.option("url", url)
.option("dbtable", "MyTable")
.option("user", "MyUser").option("password", "MyPwd")
.load()
dataframe_mysql.registerTempTable("MyTable")
val lastNames = dataframe_mysql.sqlContext.sql("select lastName from MyTable")
Run Code Online (Sandbox Code Playgroud)
但这会加载 中的所有列MyTable
,而我不需要它(我只需要该lastName
列)。(此外,我需要一个sql连接查询,并且我不想将所有内容加载到Spark中)。
如何替换该option("dbtable", "MyTable")
行来指定 SQL 查询而不是表?
我尝试过查询.option("dbtable", "select lastName from MyTable")
(正如我在某处读到的那样),但这失败了:
MySQLSyntaxErrorException: select lastName from MyTable WHERE 1=0
Run Code Online (Sandbox Code Playgroud)
您所读到的内容是正确的,您需要使用下推谓词作为选项来传递查询。
MySQL 需要一个别名表或表全名:
// without pushdown predicates
.option("dbtable", "MyTable")
// with pushdown predicates
.option("dbtable", "(select lastName from MyTable) as T")
Run Code Online (Sandbox Code Playgroud)
所以您实际上希望使用后面的查询。
注意: T
这里可以是任何东西。