这是我调用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个数据库加入表。我想知道是否有人有这个问题的优雅解决方案
答案 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。)