【问题标题】:Use Sparklyr to join tables from 2 different databases使用 Sparklyr 连接来自 2 个不同数据库的表
【发布时间】:2017-10-21 16:16:05
【问题描述】:

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

【问题讨论】:

  • 你试过 tbl_cache(sc, name, force = TRUE) 吗?例如:my_var

标签: r sparklyr


【解决方案1】:

您可以在传递给 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。)

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多