2016-07-06 6 views
5

मेरे पास एक कोड है जहां मुझे तीन टेबल सेट करने की आवश्यकता है। ऐसा करने के लिए मुझे प्रत्येक तालिका के लिए jdbc फ़ंक्शन तीन बार कॉल करने की आवश्यकता है।स्पार्क एसक्यूएल में एकाधिक टेबल कैसे निर्दिष्ट करें?

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) 
संबंधित मुद्दे