使用Sparklyr运行并行函数调用

问题描述

当前,我正在使用来自doparallel库的foreach循环来跨同一台计算机的多个内核并行运行函数调用,如下所示:

out_results=foreach(i =1:length(some_list))%dopar%
{
   out=functions_call(some_list[[i]])
   return(out)
}

some_list 是数据帧的列表,每个数据帧将具有不同数量的列,function_call()是对数据执行多项操作(例如数据操作)的函数,然后使用随机森林进行变量选择,然后最终执行最小二乘拟合。变量 out 还是3个数据帧的列表,而 out_results 将是列表的列表。 我正在使用CRAN库和我在函数调用中创建的一些自定义库,由于它们的功能有限和整个代码的重写,我想避免使用spark ML库。

我想利用spark并行运行这些函数调用。可以这样做吗?如果是,我应该朝哪个方向思考。我已经阅读了Sparklyr的许多文档,但由于那里提供的示例非常简单,因此似乎并没有太大帮助。

解决方法

SparklyR's homepage给出了在Spark集群上分发的任意R代码的示例。特别是,请参见其有关分组操作的示例。

您的主要结构应该是一个数据框,您将按行对其进行处理。可能类似于以下内容(未经测试):

[Test] //fails
public void MyAsyncTest()
{
       TestDelegate testDelegate = async () => await MyTestMethod();

       Assert.That(testDelegate,Throws.Exception);
}

[Test] //passes
public void MyAsyncTest2()
{
       Assert.That(async () => await MyTestMethod(),Throws.Exception);
}

private async Task MyTestMethod()
{
       await Task.Run(() => throw new Exception());
}

总而言之,这种方法似乎是不自然的,好像我们在一个不合适的任务上强迫使用Spark一样。也许您应该检查另一个并行化框架?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...