scala – 如何在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

是否可以简化我的代码?或者也许有一些方法可以在sql配置中的某处指定多个表.

解决方法

DRY

val url = "jdbc:MysqL://127.0.0.1:3306/Firm42"
val tables =  List("company","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,props).registerTempTable(table)

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...