我目前正在尝试使用sparkR版本1.5.1实现一些功能.我见过较旧的(版本1.3)示例,其中人们在DataFrame上使用了apply函数,但看起来它不再直接可用.例:
x = c(1,2)
xDF_R = data.frame(x)
colnames(xDF_R) = c("number")
xDF_S = createDataFrame(sqlContext,xDF_R)
Run Code Online (Sandbox Code Playgroud)
现在,我可以在data.frame对象上使用sapply函数
xDF_R$result = sapply(xDF_R$number, ppois, q=10)
Run Code Online (Sandbox Code Playgroud)
当我在DataFrame上使用类似的逻辑时
xDF_S$result = sapply(xDF_S$number, ppois, q=10)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息"as.list.default(X)中的错误:没有将此S4类强制转换为向量的方法"
我能以某种方式这样做吗?
这可以通过Spark 2.0 中的用户定义函数来实现。
wrapper = function(df){
+ out = df
+ out$result = sapply(df$number, ppois, q=10)
+ return(out)
+ }
> xDF_S2 = dapplyCollect(xDF_S, wrapper)
> identical(xDF_S2, xDF_R)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
请注意,您需要一个像这样的包装函数,因为您无法直接传递额外的参数,但这在将来可能会改变。
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |