这是我调用 Sparklyr session 后的当前方式:
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 个数据库的表。我想知道是否有人对这个问题有一个优雅的解决方案
最佳答案
您可以在传递给 dbGetQuery 函数的 Spark SQL 语法中指定数据库,例如:
df_1 <- dbGetQuery(sc, "select * from db_1.table_1")
但是,请注意 dbGetQuery 将数据作为 R 数据帧收集到驱动程序,因此您可能希望在 dbGetQuery 中进行连接,例如:
df <- dbGetQuery(sc,"select * from db_1.table_1 A inner join db_2.table_2 B where A.col_1 = B.col_2)
(或者,如果您的数据集非常大,但您想通过对 R 更友好的 API 而不是 Spark SQL 进行聚合,则可以使用 SparkR。)
关于r - 使用 Sparklyr 连接来自 2 个不同数据库的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105521/