如何在Spark SQL中指定多个表?

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配置中是否有指定多个表的方法。


这个答案有帮助吗?还是您需要更多的答案? - 030
1个回答

8

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) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接