2016-07-06 10 views
5

私は3つのテーブルを設定する必要があるコードを持っています。そのためには、テーブルごとにjdbc関数を3回呼び出す必要があります。以下のコードを参照Spark SQLで複数のテーブルを指定する方法は?

val props = new Properties 
    props.setProperty("user", "root") 
    props.setProperty("password", "pass") 

val df0 = sqlContext.read.jdbc(
    "jdbc:mysql://127.0.0.1:3306/Firm42", "company", props) 

val df1 = sqlContext.read.jdbc(
    "jdbc:mysql://127.0.0.1:3306/Firm42", "employee", props) 

val df2 = sqlContext.read.jdbc(
    "jdbc:mysql://127.0.0.1:3306/Firm42", "company_employee", props) 

df0.registerTempTable("company") 
df1.registerTempTable("employee") 
df2.registerTempTable("company_employee") 

val rdf = sqlContext.sql(
    """some_sql_query_with_joins_of_various_tables""".stripMargin) 

rdf.show 

コードを簡略化することはできますか?または、SQL設定のどこかに複数のテーブルを指定する方法があります。

+0

回答を得ましたか、または追加の回答が好きですか? – 030

答えて

2

DRY

val url = "jdbc:mysql://127.0.0.1:3306/Firm42" 
val tables = List("company", "employee", "company_employee") 

val dfs = for { 
    table <- tables 
} yield (table, sqlContext.read.jdbc(url, table, props)) 

for { 
    (name, df) <- dfs 
} df.registerTempTable(name) 

は、データフレームを必要としないのですか?最初のループをスキップ:

for { 
    table <- tables 
} sqlContext.read.jdbc(url, table, props).registerTempTable(table) 
関連する問題