问题标签 [mclapply]

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.

0 投票
2 回答
167 浏览

r - 避免冗余处理的 lapply() 和 mclapply() 版本

我正在寻找仅处理参数列表lapply()mclapply()唯一元素的版本X。这样的东西已经存在了吗?

编辑:换句话说,我不想lapply()打扰处理重复项,但我想length(lapply(X, ...))等于length(X),而不是length(unique(X))(以及要匹配的适当值)。另外,我假设 的每个元素X都相当小,因此采用唯一值应该不会太麻烦。

当前行为:

期望的行为:

lapply(任务,long_computation)

您可以在此处找到预期的用例

0 投票
2 回答
1563 浏览

r - 如何使用包“sparklyr”在 R 中实现 lapply 功能

我对 Spark 很陌生,我试图在网上寻找一些东西,但我没有找到任何令人满意的东西。

我一直使用命令运行并行计算mclapply,我喜欢它的结构(即,第一个参数用作滚动索引,第二个参数是要并行化的函数,然后是传递给函数的其他可选参数)。现在我正在尝试通过 Spark 做同样的事情,即我想在 Spark 集群的所有节点之间分配我的计算。这就是我所学到的以及我认为代码应该如何构造的内容(我正在使用包sparklyr):

  1. 我使用命令创建到 Spark 的连接spark_connect
  2. 我在 Spark 环境中复制我的 data.framecopy_to并通过它的 tibble 访问它;
  3. 我想实现一个“Spark-friendly”版本mclapply,但我看到包中没有类似的功能(我看到包中存在该功能spark.lapplySparkR但不幸的是它不再在 CRAN 中)。

下面是我实现的一个简单的测试脚本,它使用函数mclapply.

如果有人已经找到了解决方案,那就太好了。其他参考/指南/链接也非常受欢迎。谢谢!

0 投票
1 回答
344 浏览

r - R转换代码以在共享内存中运行

以下代码有助于了解最佳集群的数量。

参考:https ://uc-r.github.io/

目标是将其转换为在具有多个内核的共享内存中运行,以便快速完成。fviz_nbclust尝试使用此方法,但速度极慢。

方法/尝试:

首先,创建wss要调用的方法mclapply

i是并行启动的数量,k实际上k.values是我们需要尝试找到最优的集群数量。

k.values <- 1:15

kmean_results <- mclapply(c(25,25,25,25), k.values, FUN=parallel.wss)

但收到以下警告:

kmean_results物体:

head(kmean_results) [[1]] [1] "kmeans(df, k, nstart = i) 中的错误:\n 在 'x' 和 'centers' 中的列数必须相同\n" attr(,"class ") [1] "尝试错误" attr(,"条件")

0 投票
0 回答
279 浏览

r - 使用 mclapply 运行函数时的环境

我有如下功能:

我想使用 mclapply 并行迭代它。

这是我的函数和用例的一个非常简化的版本,但我想用它来阐明在使用用户定义的函数和 mclapply 时如何处理环境。

因为这是在同一个 RAM 上并行处理的,所以我想知道 mclapply 函数是否会在某些时候“混淆”并混合data或混合clusters不同的参数(如 定义list)(通过覆盖dataclusters使用变量是使用错误的X)。我知道每个函数都维护自己的环境,但是由于一次使用多次相同的函数,我想确认它是如何工作的。

如果您能为我澄清这一点或为我指明正确的方向,我将不胜感激。

谢谢!

0 投票
1 回答
182 浏览

r - mclapply 与 vecLib 冲突

我最近将我的 R BLAS 框架更改为 Mac 附带的 vecLib。这样做之后,我在 R 中的并行包遇到了问题。这是一个例子:

这个(mclapply 随机返回 NULL)讨论说 mclapply 可能由于内存问题而返回 NULL。虽然 70x70 矩阵不应导致内存问题(否则我的工作区是空的,已被垃圾收集),但请注意,对于 60x60 矩阵,问题就会消失:

我什么时候都没有问题mc.cores=1。如果我将 BLAS 切换回默认值,我也没有问题。此外,当我从终端使用 R 时没有问题。 使多线程 R(通过 vecLib)在终端外与 mclapply 一起工作的正确方法是什么?

0 投票
0 回答
520 浏览

r - R中大数据的离散小波变换

我正在使用 R 中的以下代码进行离散小波变换。我的 data.table 格式的数据是以块的形式从配置单元表中获取并转换为矩阵,然后按如下方式应用小波变换。

对于具有 32 个内核的 LINUX 机器上的 1000 万 x 52 列的数据集,离散小波变换大约需要 3 小时 30 分钟,如上所述,我使用 28 个内核进行处理。但是我必须在 30-35 百万行 X 52 列的数据集上执行此操作,并且运行 3000 万行的数据集大约需要 26 小时。 m_score上面是从 data.table 转换的分块矩阵列表。

关于在 R 中更快地做到这一点的任何想法

  • 寻找任何 R 或其他语言的专业库。
  • 由于数据来自蜂巢表,我也愿意使用 Hive UDF 进行变换,但找不到用于小波变换的 UDF。
0 投票
1 回答
70 浏览

r - 使用 mclapply 或 %dopar% 从对角线切片组装矩阵,例如 Matrix::bandSparse

现在我正在使用 R 中的一些巨大的矩阵,我需要能够使用对角带重新组装它们。出于编程原因(为了避免对大小为 n 的矩阵(数百万次计算)进行 n*n 操作,我只想进行 2n 次计算(数千次计算),因此选择在对角线带上运行我的函数矩阵。现在,我有了结果,但需要获取这些矩阵切片并以允许我使用多个处理器的方式组装它们。

foreach 和 mclapply 都不允许我在循环之外修改对象,因此我正在尝试考虑并行解决方案。如果有一些函数可以将非对角带分配给可以可靠完成的矩阵的一部分,我完全赞成。

输入:

所需的输出(并行操作):

我越看这个,我需要一个并行化的 Matrix::bandSparse 版本。

0 投票
2 回答
327 浏览

r - mclapply 与 lme4 和长向量

我正在使用mclapply包来估计在高性能集群上parallel使用包的混合 glmer 模型。lme4我遇到了这里描述的问题。我应用了添加的建议修复mc.preschedule=F,但问题仍然存在。代码按照此处所述进行设置。

我不确定如何解决它,有什么想法吗?我应该切换到另一种并行化方法吗?如果是这样,如何?

这是我的代码,但基本上它遵循链接文章的逻辑:

这是相关的错误消息:

谢谢!

更新:

该数据是公开可用的欧洲社会调查的清洁版本。您可以从这里下载文件(1.8 MB)

0 投票
1 回答
748 浏览

r - mc.cores = 1 的 mclapply() 是否与 lapply() 相同?

我知道我不应该嵌套并行运算符,但我的情况是我必须mclapply()在我的代码中基本上嵌套两个调用。这是因为在我的代码中,我有一个已经在其中使用的函数(我们称之为它foo()mclapply()。我想要的基本上是运行顺序版本的并行线程foo(),执行如下操作:

我可以只运行内部mclapply()还是mc.cores = 1我应该实现一个顺序版本foo()

换句话说:mclapply(..., mc.cores = 1)行为是否完全一样lapply(...)?在这种情况下,是否存在减慢程序的并行开销?

0 投票
0 回答
502 浏览

r - mcmapply 在多核上的性能

我有一个要在大约 300 万个数据点上运行的函数。我正在尝试在具有 8 个内核mcmapplyUbuntu机器上并行化该功能。该函数接受list长度为 300 万的 a 以及另外 3 个长度为 300 万的向量和 1 个常量值cutoffyearmon

该代码在单核上 2 分钟内运行 100000 行数据,运行良好,并且没有抛出错误。但是,当我尝试在我的机器的 6 个内核上并行运行代码时,mcmapply它会持续运行超过 5 个小时。

更新:这是我的函数调用的淡化版本。我为 1 个月、2 个月和 3 个月的持续时间创建了另外 9 个变量。我只考虑了 6 个月和 1 年的时间变量。

我正在使用以下函数调用:

您可以使用以下一组输入来运行该函数并检查其输出。

我假设代码将通过分配mc.preschedule=TRUE. 但是我看不到处理速度的任何显着表现。在机器的 6 个内核上运行时,我预计处理将在大约 1.5 小时内完成。

如果我错过了什么,有什么建议。

当使用 pbmcmapply 时,mc.cores=6我得到的 ETA 为 06:01:32:57