Sparkr 将广播 RDD 转换为实际值
Sparkr convert broadcast RDD to actual value
我在我的程序中向工作节点发送了广播 BC
BC= SparkR:::broadcast(sc, data)
我有一个功能
myF=function(x)
{
allV=SparkR:::value(BC)
..... Use allV ......
return(result)
}
然后我调用了这个函数
finalResult = SparkR:::lapply(currentRDD, myF)
但是,错误信息告诉我allV仍然是PipelineRDD,如何将allV转换为实际数据的正确方法是什么?
非常感谢!!
据我了解,您正在尝试广播 RDD
,这是完全没有意义的。 RDD
只是一个配方或对转换的描述,不包含实际数据。
要获得结果,您必须触发一个操作,例如 collect
,但 Spark 不支持嵌套操作或转换,因此您无法实现您想要实现的目标。
如果数据小到可以在本地处理,您应该 collect
首先广播一个本地数据结构。如果不可能,你可以 join
RDDs。
再一次,内部 API 是内部的原因:)
我在我的程序中向工作节点发送了广播 BC
BC= SparkR:::broadcast(sc, data)
我有一个功能
myF=function(x)
{
allV=SparkR:::value(BC)
..... Use allV ......
return(result)
}
然后我调用了这个函数
finalResult = SparkR:::lapply(currentRDD, myF)
但是,错误信息告诉我allV仍然是PipelineRDD,如何将allV转换为实际数据的正确方法是什么?
非常感谢!!
据我了解,您正在尝试广播 RDD
,这是完全没有意义的。 RDD
只是一个配方或对转换的描述,不包含实际数据。
要获得结果,您必须触发一个操作,例如 collect
,但 Spark 不支持嵌套操作或转换,因此您无法实现您想要实现的目标。
如果数据小到可以在本地处理,您应该 collect
首先广播一个本地数据结构。如果不可能,你可以 join
RDDs。
再一次,内部 API 是内部的原因:)