如何并行实现 "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
/ combineByKey
、reduceByKey
或 groupByKey
等操作。我个人强烈反对这样做。 API 的这一部分与其 Scala 或 Python 对应部分相比不够成熟,缺少一些基本功能并且速度明显较慢。
虽然软件推荐与 SO 无关,但您可能会发现多个 R 库很有用,包括 parallel
、snow
, 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 内部结构提供更高的投资回报率.
我需要在一个非常大的数据集上应用 "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
/ combineByKey
、reduceByKey
或 groupByKey
等操作。我个人强烈反对这样做。 API 的这一部分与其 Scala 或 Python 对应部分相比不够成熟,缺少一些基本功能并且速度明显较慢。
虽然软件推荐与 SO 无关,但您可能会发现多个 R 库很有用,包括 parallel
、snow
, 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 内部结构提供更高的投资回报率.