使用Sparklyr连接来自2个不同数据库的表

时间:2017-05-22 05:54:04

标签: r sparklyr

这是我调用Sparklyr会话后的当前方式:

dbGetQuery(sparkContext, "USE DB_1")

df_1 <- tbl(sparkContext, "table_1")

dbGetQuery(sparkContext, "USE DB_2")

df_2 <- tbl(sparkContext, "table_2")

df <- df_1 %>% inner_join(df_2, by = c("col_1" = "col_2"))

nrow(df))

我遇到的错误:

"Error: org.apache.spark.sql.AnalysisException: Table or view not found: table_1"

我的观点是Sparklyr没有(直接)支持从2个数据库加入表。我想知道是否有人有这个问题的优雅解决方案

1 个答案:

答案 0 :(得分:3)

您可以使用传递给dbGetQuery函数的Spark SQL语法指定数据库,例如:

df_1 <- dbGetQuery(sc, "select * from db_1.table_1")

但是,请注意dbGetQuery将数据作为R数据帧收集到驱动程序,因此您可能希望在 dbGetQuery中执行join ,例如:

df <- dbGetQuery(sc,"select * from db_1.table_1 A inner join db_2.table_2 B where A.col_1 = B.col_2)

(或者,如果您的数据集非常大但您希望通过更友好的API而不是Spark SQL进行聚合,则可以使用SparkR。)