【问题标题】:Dplyr and RJDBC : unable to find an inherited method for function ‘dbGetQuery’ for signature ‘"JDBCConnection", "tbl_df"Dplyr 和 RJDBC:无法为签名“JDBCConnection”、“tbl_df”找到函数“dbGetQuery”的继承方法
【发布时间】:2018-03-22 14:53:42
【问题描述】:

我正在使用 RJDBC 包连接到 Oracle 数据库。 我需要检索大量数据,我想通过不同的核心分发查询。 我知道该表有五百万条记录。因此,我编写了一个 SQL 查询,例如:

SqlCMD =   "SELECT * from ( SELECT m.*, rownum r FROM  Table ) WHERE r >= minV AND r < maxV"

points = ceiling(seq(1, rownum, length.out = 20))

 [1]       1  269578  539154  808730 1078306 1347882 1617458 1887034 2156610 2426186 2695762 2965338 3234914 3504490 3774066
[16] 4043642 4313218 4582794 4852370 5121946

sqlCl = NULL
for (i in 1:19){
  sqlCl[i] = gsub("minV", points[i], sqlCMD)
  sqlCl[i] = gsub("maxV", points[i+1], sqlCl[i])
}
sqlCl = sqlCl %>% as.data.frame

group <- rep(1:cl, length.out = 19)
sqlCl <- bind_cols(tibble(group),  sqlCl)
cl <- create_cluster(8) 

然后我分配给核心并设置环境核心

by_group <- sqlCl %>%
  partition(group, cluster = cl)

by_group %>%
  cluster_library("RJDBC") %>%
  cluster_library("dplyr") %>%
  cluster_assign_value("sqlCl", sqlCl) %>%
  cluster_assign_value("pathOjdbc", pathOjdbc)%>% #path to ojdbc8.jar
  cluster_assign_value("dbName", dbName) %>%
  cluster_assign_value("user", user)%>%
  cluster_assign_value("password", password) %>% 
  cluster_assign_value("dbGetQuery", dbGetQuery)


by_group %>%
  cluster_assign_value("conn", 
dbConnect(JDBC(driverClass="oracle.jdbc.OracleDriver", classPath = pathOjdbc), 
dbName, user , password))

然后我尝试做查询:

ws3_processed_in_parallel <- 
  by_group %>% 
  do({
    df = RJDBC::dbGetQuery(conn, sqlCl)
  })

我收到了这个错误,我真的不知道我能做什么。

Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  8 nodes produced errors; first error: unable to find an inherited method for function ‘dbGetQuery’ for signature ‘"JDBCConnection", "tbl_df"’

我也在尝试使用“tbl”,但我明白了:

  Error in (function (classes, fdef, mtable)  : 
      unable to find an inherited method for function ‘dbBegin’ for signature ‘"JDBCConnection"’

【问题讨论】:

    标签: r parallel-processing dplyr rjdbc multidplyr


    【解决方案1】:

    dbGetQuery 期望其 statement 参数属于 character 类,而您似乎正在使用来自 cluster_assign_value("sqlCl", sqlCl) 的全部内容。
    您还使用cl 创建groupsqlCl,我不确定sqlCl 到底是什么样子。

    也许您想使用cluster_assign_each(... 而不是cluster_assign_value("sqlCl", sqlCl)

    我也不确定为什么你有by_group %&gt;% cluster_library(... 而不是cl %&gt;% cluster_library(...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多