2016-09-30 55 views
1

我目前從星火查詢一個MySQL如下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") 

但這裝載來自MyTable所有列,而我不需要那個(我只需要lastName柱)。 (此外,我需要一個SQL連接查詢,我不想將所有內容都加載到Spark中)。

如何更換option("dbtable", "MyTable")行來指定SQL查詢而不是表?

我試圖與.option("dbtable", "select lastName from MyTable")查詢(如我讀的地方),但這種失敗:

MySQLSyntaxErrorException: select lastName from MyTable WHERE 1=0 

回答

1

您已經閱讀什麼是正確的,你需要與下推謂詞查詢傳遞作爲一個選項。

的MySQL這裏需要一個別名錶或表全稱:

// without pushdown predicates 
.option("dbtable", "MyTable") 

// with pushdown predicates 
.option("dbtable", "(select lastName from MyTable) as T") 

所以你實際上是希望用後來的查詢。

注意:T可以是任何東西在這裏。