使用SparkR 2.0.0进行并行分布式处理

时间:2017-04-06 16:26:39

标签: r machine-learning parallel-processing sparkr

我是Spark的新手,并在作为Hadoop边缘节点的RServer上尝试SparkR 2.0.0。创建和查询DataFrame很好。但这是一个问题,我试图看看它是如何工作的。

给定一个项目,我需要查询外部数据源的相关数据,机器学习一些ML lib调用并转储结果。我需要学习大约500个项目。显然,我想在所有可用的工作节点上使用所有CPU,以便500 ML并行运行。我注意到开源R上的原生ML调用没有花费太多时间来运行项目数据集的算法(通常~10000行 - 总共需要1分钟来获取数据,运行ML并提供我需要的结果)。

请注意,我没有调用Spark的ML。但我试图看看我是否只能将Spark用于分布式并行计算,看看我能学得多快。另一种方法是加载Spark DataFrame中的所有500个项目,并将其留给Spark来弄清楚如何在分区的DataFrame上运行ML。但这是一项单独的努力和研究,以比较与迷你ML的多个,并行和分布式运行相关的表现(每个项目1个)。

问题:我们如何在Spark R中调用parallelize?我是否必须使用callJmethod传递项目的SparkDataFrame并为每个项目调用函数调用?或者是否有更好的方法来并行化我的项目集合并对每个项目进行函数调用(如并行dApply)?任何提示/帮助表示赞赏。

很抱歉很长的帖子。我对Spark很新,似乎有Scala / Java / R和Python的方式,可能R方法相对局限于其他我没有抓住的方法。谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过spark.lapply函数(link - > spark.lapply)?基本上,它使用spark作为资源提供者,而不是大数据"大数据的工具。处理。如果你的500个项目的数据可以在内存中处理,你可以创建一个包含500个元素的列表(每个元素都有相应的数据+其他一些东西,如超参数)并将它与一个适当的函数一起传递给spark.lapply(比如一些机器学习)模型)。 Spark应该做的是类似于并行包(在工作节点上打开单独的RSession,分配计算并将结果返回给驱动程序)。