2016-07-06 15 views
5

Ich habe einen Code, wo ich drei Tabellen einstellen muss. Um das zu tun, muss ich jdbc Funktion dreimal für jede Tabelle aufrufen. Siehe Code unterWie Sie mehrere Tabellen in Spark SQL angeben?

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 

Kann ich meinen Code vereinfachen? Oder vielleicht gibt es eine Möglichkeit, mehrere Tabellen irgendwo in der SQL-Konfiguration anzugeben.

+0

Hat die Antwort geholfen oder bevorzugen Sie zusätzliche Antworten? – 030

Antwort

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) 

Benötigen Datenrahmen nicht? Erste Schleife überspringen:

for { 
    table <- tables 
} sqlContext.read.jdbc(url, table, props).registerTempTable(table)