如何并行实现 "by" 函数,或者最好通过 sparkR

how can I implement "by" function in parallel, or preferably by sparkR

我需要在一个非常大的数据集上应用 "by" 函数。数据如下:

id    value1   value2
1      245      446
1      592      567
1      356      642
...    ...
2      231      421
2      423      425
2      421      542

我需要为每个 id 计算 value1 和 value2 之间的值,以便:

by(dataset, id, function(input) myfun(input$value1, input$value2) 

但是,数据非常非常大。这样的计算需要很多时间。

我想知道,有没有加速这个功能。

我想用并行的方式,最好用sparkR。但我不知道如何完成这项工作。 SparkR 可以支持吗?

长话短说,不支持将具有任意函数的 by / tapply 转换为 SparkR。目前(Spark 1.5 / 1.6 预览版)SparkR 仅公开了 Spark SQL API 的有限子集,这或多或少是一个分布式 SQL 查询引擎。

我想使用的函数可以在没有 R 的情况下使用标准 SQL 逻辑和 GROUP BY 和/或 window 函数来表达,那么你就可以开始了。

有些人倾向于使用内部 RDD API,它提供 aggregateByKey / combineByKeyreduceByKeygroupByKey 等操作。我个人强烈反对这样做。 API 的这一部分与其 Scala 或 Python 对应部分相比不够成熟,缺少一些基本功能并且速度明显较慢。

虽然软件推荐与 SO 无关,但您可能会发现多个 R 库很有用,包括 parallelsnow, doMC, Rmpi and brand fresh multidplyr. Including great storage options like data.table or ff and R independent solutions like GNU Parallel you have plenty of options. Since problem you're trying to solve is embarrassingly parallel 使用这些工具的某种组合应该比修补 SparkR 内部结构提供更高的投资回报率.