使用sparkr时,我是否应该在工作节点上预安装cran r包
我想在cran上使用r包,比如与sparkr一起使用使用sparkr时,我是否应该在工作节点上预安装cran r包,r,apache-spark,sparkr,R,Apache Spark,Sparkr,我想在cran上使用r包,比如与sparkr一起使用forecast等,并遇到以下两个问题 我应该在工作节点上预安装所有这些包吗?但是当我阅读spark的源代码时,spark似乎会自动压缩包并通过--jar或--packages将它们分发给工作人员。我应该怎么做才能使依赖关系对工作人员可用 假设我需要在map转换中使用forecast提供的函数,我应该如何导入包。我是否需要执行以下操作,在map函数中导入包,它是否会进行多次导入: SparkR:::映射(rdd,函数(x){ 图书馆(预测)
forecast
等,并遇到以下两个问题
map
转换中使用forecast
提供的函数,我应该如何导入包。我是否需要执行以下操作,在map函数中导入包,它是否会进行多次导入:
SparkR:::映射(rdd,函数(x){
图书馆(预测)
那么其他员工呢
})
在阅读了更多的源代码之后,我似乎可以使用
includePackage
根据需要在工作节点上包含包。现在的问题是,我必须在节点上手动预装软件包,对吗?如果这是真的,那么问题1中描述的jar和包的用例是什么?如果这是错误的,那么如何使用--jars和--packages来安装软件包呢?重复这一点很无聊,但是首先不应该使用内部RDDAPI。它在第一个正式的SparkR版本中被删除了,不适合一般使用
<> P>直到新的低级别API*准备好(例如,),我才不会把SARK视为运行纯R代码的平台。即使在它发生变化时,添加带有R包装器的本机(Java/Scala)代码也是一个更好的选择
话虽如此,让我们从你的问题开始:
RPackageUtils
旨在处理使用Spark软件包创建的软件包。它不处理标准的R库
includePackage
docstring:
假定该软件包安装在Spark群集中的每个节点上
*如果使用Spark 2.0+,则可以使用Dappy、gapply和Lappy函数。添加库与Spark 2.0+配合使用。例如,我正在集群的所有节点中添加包预测。该代码适用于Spark 2.0+和databricks环境
schema <- structType(structField("out", "string"))
out <- gapply(
df,
c("p", "q"),
function(key, x)
if (!all(c("forecast") %in% (.packages()))){
if (!require("forecast")) {
install.packages("forecast", repos ="http://cran.us.r-project.org", INSTALL_opts = c('--no-lock'))
}
}
#use forecast
#dataframe out
data.frame(out = x$column, stringAsFactor = FALSE)
},
schema)
schema更好的选择是通过spark submit archive选项传递您的本地R包,这意味着您不需要在每个辅助进程中安装R包,也不需要在运行SparkR::Dappy
时安装和编译R包,因为等待时间很长。例如:
Sys.setenv(“SPARKR_SUBMIT_ARGS”=“--主纱线客户端--num executors 40--executor cores 10--executor memory 8G--驱动程序内存512M--jars/usr/lib/hadoop/lib/hadoop-lzo-0.4.15-cdh5.11.1.jar--files/etc/hive/conf/hive-site.xml--archives/your_R_packages/3.5.zip--files xgboost.model SPARKR shell”)
调用SparkR::dapply
函数时,让它先调用.libpath(“./3.5.zip/3.5”)
。您需要注意的是,服务器版本R必须与zip文件版本R相同。为什么要使用非导出函数?@piccolbo非导出函数
是什么意思?我尝试在workers上并行运行cran包提供的一些函数。我认为使用sparkr可以避免我管理并行计算系统。但这样使用sparkr可能是错误的。对不起,我的英语很差。非导出意味着使用::
(三个冒号)函数访问,或者换句话说,当您使用库(一些名称)
@zero323时,这些函数没有被导入。我是R新手,从其他堆栈溢出问题复制SparkR:::map
示例,我的意思是用scala代码rdd.map{x=>y}
来表示。很高兴了解::
:)顺便说一句。如果您需要Spark的低级别R访问,您可能会感兴趣。