首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有数据库连接的multidplyr

具有数据库连接的multidplyr
EN

Stack Overflow用户
提问于 2016-05-11 15:17:31
回答 1查看 458关注 0票数 0

我试图使用多点运行一个do命令,该命令运行一个自定义函数,该函数使用RJDBC查询Vertica数据库。运行multidplyr示例或直接查询数据库没有问题,但当我试图连接到multidplyr中的数据库时,会得到以下错误:

checkForRemoteErrors中的错误(lapply(cl,recvResult)):3个节点产生错误;第一个错误:未检测到运行的JVM。也许.jinit()会有所帮助。

我尝试了注释这里中的建议,通过传递vertica数据库连接对象手动创建集群,但仍然收到一个“未检测到运行JVM”的错误。我猜想这是因为我需要告诉每个节点启动一个JVM,但我现在不知道如何这样做。

我的代码,很抱歉,因为我不能共享数据库,所以它不能被复制:

代码语言:javascript
复制
# set up DB connection
vertica <- dbConnect(vDriver, ...connection info...)

# create cluster
cluster3 <- create_cluster(3)
parallel::clusterExport(cl = cluster3, c("getData", "vertica"))

# run function in parallel using multidplyr
accounts_part <- multidplyr::partition(accounts, accountId, cluster = cluster3)

accounts_data <- accounts_part %>% 
  group_by(accountId) %>%
  do(getData(ac = .$accountId, vertica = vertica))
EN

回答 1

Stack Overflow用户

发布于 2017-01-28 11:30:27

我不能重现您的代码,所以我的答案将基于我的经验(我对每个集群分配(不同的)随机数有类似的问题),并且基于。希望它能成功。

我认为您的主要问题是,您的连接是为了将您的db与实际会话连接起来,因此您不能在每个节点上“复制”它,因为它们需要自己的“方式”到数据库。

另一方面,您仍然需要为每个连接使用相同的名称,以便能够在单个(并行)调用中管理它们。因此,我认为您只需直接将连接创建到每个节点,而不是在实际会话中创建一个连接,而不是将其复制到节点中。

代码语言:javascript
复制
# create cluster
cluster3 <- create_cluster(3)

# export data, function, ...
cluster_assign_value(cluster, 'getData', getData)

# setup DB connection in each cluster (evaluated in each cluster)
cluster_eval(cluster, vertica <- dbConnect(vDriver, ...connection info...))
# not
# cluster_assign_value(cluster,
#     'vertica', dbConnect(vDriver, ...connection info...)
# )
# which is evaluate locally and so it is the same as your code

# run function in parallel using multidplyr
accounts_part <- multidplyr::partition(accounts, accountId,
    cluster = cluster3
)

accounts_data <- accounts_part %>% 
    # group_by(accountId) %>% # partition() have already grouped them
    do(getData(ac = .$accountId, vertica = vertica)) # %>%
    # collect() # if you have no more computations to do and want get back
                # the results locally
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37166889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档