2016-07-06 2 views
5

3 개의 테이블을 설정해야하는 코드가 있습니다. 그렇게하려면 각 테이블에 대해 jdbc 함수를 세 번 호출해야합니다. 아래 코드 참조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) 
관련 문제