问题标签 [r-doredis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 一旦运行 foreach 循环,Windows 7 上的 doRedis 就会出错
我有一个简单的设置如下:
我正在尝试在 R 中使用 doRedis 包来设置集群。我的机器上安装了“2.8.2101”版本的 Redis。首先,我尝试在本地机器(在 RStudio 中)上运行作业:
我已检查 Redis 是否作为服务运行(redis-cli ping 返回“PONG”)
但是,当我尝试运行一个简单的 foreach 循环时,出现以下错误;即使我重新启动所有内容,我也会收到相同的错误:
sprintf("%s:%.0f.env", queue, ID) 中的错误:无效格式 '%.0f'; 对字符对象使用格式 %s
显然,顺序版本工作正常:
请帮忙!任何评论/指针表示赞赏。如果您需要更多信息,请告诉我。
r - foreach 可以同时选择性地使用多个后端(doParallel 和 doRedis)吗?
我正在处理大小约为 1 Gb 的文件。处理可以分为两个步骤,一个取决于大文件,第二个取决于较小的数据量。我可以为 doParallel 后端排队一些 foreach 命令,同时用 doRedis 后端排队其他 foreach 命令吗?
这里的目标是由于内存和网络 IO 限制而使远程作业保持较小,同时还利用我拥有的几个本地内核进行预处理/后处理。
r - 为什么我的 doRedis 工作人员不开始处理,直到所有作业都在 redis 服务器中
使用 foreach 和 doRedis 时,doRedis 工作人员会等到所有作业都到达 redis 服务器后再开始处理。是否可以在所有预处理完成之前让它们开始?
我正在使用一个运行良好的迭代器 - 预处理“及时”发生,并且随着迭代器的运行,作业数据开始到达服务器。不过,我似乎无法利用这种行为,因为工作人员只是等到所有工作都上传完毕。
示例代码:
在这个例子complex.iter
中需要一段时间,并且有很多元素需要迭代。process.function()
因此,如果工作人员在所有预处理完成之前开始运行,那就太好了。不幸的是,他们似乎要等到complex.iter
在所有元素上运行。
我已经设置了.inorder=F
。
关于如何实现这种期望行为的任何建议?谢谢。
r - R - doRedis - 覆盖 getTask 以控制并行 foreach 循环中的执行顺序
问题:我需要控制由 foreach 循环并行处理任务的执行顺序。不幸的是,foreach 不支持这一点。
解决方案:使用 doRedis 使用数据库来保存在 foreach 循环中执行的所有任务。为了控制顺序,我想通过 setGetTask 覆盖 getTask 以根据预先指定的顺序获取任务。虽然我找不到太多关于如何做到这一点的文档。
附加信息:
在redis 文档中有一个关于 setGetTask 的小段落和一个示例 。
虽然我认为文档中的代码在语法上不正确(缺少恕我直言“和右括号”)“)。我认为这在 CRAN 上是不可能的,因为文档的代码是在提交时执行的。
更改 getTask 函数不会改变有关工人获取任务的任何内容(即使在 redisEval 中引入明显的废话,例如将其更改为 redisEval("dddddddddd(((")
从源代码安装软件包后,我只能访问 setGetTask 函数(我从1.1.1 版的官方 CRAN 软件包页面下载了该软件包(恕我直言,这与直接从 CRAN 安装它没有区别)
数据:要执行的任务的数据框如下所示:
我想使用'taskQueuePosition'来控制顺序,应该先执行编号较小的任务。
问题:
- 有人知道我可以从哪里获得有关使用 doRedis 或 setGetTask 执行此操作的更多信息的任何来源吗?
- 有人知道我需要如何更改 getTask 以实现上述目的吗?
- 还有其他聪明的想法来控制 foreach 循环中的执行顺序吗?最好是这样在某些时候我可以使用 doRedis 作为并行后端(更改这将意味着由于复杂的技术基础设施原因而对处理进行重大更改)。
代码(便于复制):
下面假设redis-server在本地机器上启动。
Redis 数据库填充:
工人:
r - 如何在集群上使用 doRedis 和 caret?
我一直在使用 R 中的doRedis包来尝试在集群上运行一些代码。我有一台 Windows 机器和一台运行 Ubuntu 的机器(这是安装 redis 的地方)。
我可以愉快地运行 doRedis 文档中的示例,但我的目标是能够将 doRedis 与插入符号一起用于某些机器学习应用程序。我的理解是插入符号允许并行化,似乎其他人已经让它工作了,但对于我的生活,我无法弄清楚我哪里出错了。
我找到了这个例子并将其稍微修改为以下内容:
这仅在本地计算机上运行,并且不会分发到 redis 队列(我可以使用doRedis::jobs()
以及redis-cli --stat
在 Ubuntu 终端中运行来查看它,两者都显示没有作业被传递到服务器)。
我错过了什么?