2016-07-06 15 views
5

Mam kod, w którym muszę ustawić trzy tabele. Aby to zrobić, muszę wywołać funkcję jdbc trzy razy dla każdej tabeli. Zobacz kod poniżej:Jak określić wiele tabel w 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 

Czy można uprościć mój kod? A może jest jakiś sposób na określenie wielu tabel gdzieś w konfiguracji SQL.

+0

czy pomoc była pomocna, czy wolisz dodatkowe odpowiedzi? – 030

Odpowiedz

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) 

nie trzeba ramek danych? Pomiń pierwszą pętlę:

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