Fin*_*son 5 scala apache-spark apache-spark-sql
我有一个代码,我需要设置三个表.为此,我需要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
Run Code Online (Sandbox Code Playgroud)
是否可以简化我的代码?或者也许有一些方法可以在SQL配置中的某处指定多个表.
小智 8
干:
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)
Run Code Online (Sandbox Code Playgroud)
不需要数据框架?跳过第一个循环:
for {
table <- tables
} sqlContext.read.jdbc(url, table, props).registerTempTable(table)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3379 次 |
| 最近记录: |