拓冰建站拓冰建站
首页 / 资讯中心 / 正文

multidplyr dplyr 动词完全清单:mutate、summarise、do 等 10 个常用动词的并行用法(附可直接复制的示例)

multidplyr dplyr 动词完全清单mutate、summarise、do 等 10 个常用动词的并行用法附可直接复制的示例【免费下载链接】multidplyrA dplyr backend that partitions a data frame over multiple processes项目地址: https://gitcode.com/gh_mirrors/mu/multidplyrmultidplyr 是一个 R 语言的 dplyr 后端包它能把一个数据框切分到多个进程让你熟悉的 dplyr 动词mutate、summarise、filter、do 等自动在多核上并行执行。本文完整列出 multidplyr 支持的 10 个常用 dplyr 动词并为每个动词提供可直接复制的并行用法示例帮新手快速上手 R 数据并行处理。 小提醒multidplyr 更适合大行数数据千万级以上或计算开销大的任务小数据的简单操作进程间通信开销反而可能拖慢速度。⚡ 快速上手3 步搭好并行集群第 1 步创建集群每个 worker 都是独立的 R 进程并让每个进程都加载 dplyrlibrary(multidplyr) cluster - new_cluster(4) cluster_library(cluster, dplyr)第 2 步用partition()把数据切分并分发到各 worker。建议先group_by()再切分保证同一组的行落在同一个 worker 上library(nycflights13) flights1 - flights %% group_by(dest) %% partition(cluster)第 3 步计算完成后用collect()把结果取回主会话flights1 %% summarise(n n()) %% collect()得到的party_dfpartitioned data frame分区数据框用起来和普通数据框一样只是每次动词调用都会在所有 worker 上并行执行。 10 个 dplyr 动词完全清单10 个单表动词的实现位于R/dplyr-single.R连接类动词位于R/dplyr-dual.R完整测试见tests/testthat/test-dplyr-single.R动词作用典型并行场景filter按条件筛选行并行挑出延误超过 60 分钟的航班select选取列只保留需要的字段slice按位置取行每个分区各取前若干行mutate添加/修改列并行计算衍生列rename重命名列统一字段命名summarise聚合统计并行计算每个目的地的均值group_by分组按目的地分组做并行聚合ungroup取消分组聚合前还原分组结构arrange排序按延误时间降序排列do对每组执行任意操作为每个目的地并行拟合模型此外还支持 6 个两表连接动词left_join、right_join、inner_join、full_join、anti_join、semi_join以及union_all、intersect、union、setdiff集合操作。下面以nycflights13::flights约 33 万行为例所有代码块均可按上文快速上手搭好环境后直接复制运行。 逐个动词可直接复制的并行示例1️⃣ filter 并行筛选flights1 %% filter(dep_delay 60)每个 worker 各自筛选本地行结果仍是party_df可以继续链式调用其他动词。2️⃣ mutate 并行添加新列flights1 %% mutate(dep2 dep_delay * 2)新列在每个 worker 上就地计算中间结果不会传回主会话这是它比本地逐块处理更快的关键。3️⃣ select 与 slice 选列取行flights1 %% select(dest, dep_delay) flights1 %% slice(1:10) # 每个分区各取第 1–10 行注意slice是按分区取行返回总行数取决于 worker 数量解释结果时要留意这一点。4️⃣ summarise 分组并行聚合最常用flights1 %% group_by(dest) %% summarise(delay mean(dep_delay, na.rm TRUE), n n())partition()已按dest分组切分所以每个目的地的数据完整地位于一个 worker 上聚合天然正确且互不干扰结果只有几十行用collect()取回即可。5️⃣ arrange 并行排序flights1 %% arrange(desc(dep_delay))各分区先本地排序再合并结果不影响后续的分组与聚合操作。6️⃣ rename 重命名列flights1 %% rename(arr arr_time)改名只是元数据操作所有 worker 同步执行开销几乎为零。7️⃣ do 并行拟合模型multidplyr 的杀手锏do对每组数据调用一次你指定的函数是 multidplyr 最能体现价值的动词——官方示例中用mgcv::gam为每个目的地拟合广义可加模型并行耗时约 3 秒本地串行约 5 秒且任务越耗时加速比越接近 worker 数量flights1 %% group_by(dest) %% do(mod lm(dep_delay ~ day, data .))若模型用到额外包如 mgcv记得先执行cluster_library(cluster, mgcv)。8️⃣ group_by / ungroup 管理并行分组flights1 %% group_by(month) flights1 %% ungroup()记住一条经验法则先分组、再partition()分组结构才能与数据切分一致并行聚合结果才正确。 附赠两个表的并行连接连接时非party_df的一方会被自动复制到集群上再执行auto_copy机制写法与本地 dplyr 完全一致late_dest - flights %% filter(dep_delay 120) %% select(dest) flights1 %% ungroup() %% anti_join(late_dest, by dest)left_join、inner_join、semi_join等用法相同不指定by时按共同列连接。 collect 取回结果 提速避坑指南result - flights1 %% summarise(delay mean(dep_delay, na.rm TRUE)) %% collect()collect()把全部数据取回主会话返回普通分组数据框pull(delay)只取单列显著减少传输量head()从各分区预览前几行适合快速检查并行提速什么时候真正划算❌ 小于约 1000 万行的简单操作进程通信开销会抵消收益✅ 大规模数据或mutate/do中调用昂贵函数模型拟合、复杂计算提速明显✅ 单个任务越耗时加速比越接近线性消息传输成本近似恒定写在最后以上就是 multidplyr 支持的 10 个常用 dplyr 动词与并行连接动词的完整清单。你不需要改变任何 dplyr 写法习惯——只要数据先用partition()放进集群剩下的动词全部自动并行。更多细节可参考仓库中的vignettes/multidplyr.Rmd入门教程。【免费下载链接】multidplyrA dplyr backend that partitions a data frame over multiple processes项目地址: https://gitcode.com/gh_mirrors/mu/multidplyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门