我想知道如何生成一个数据对象,就像您在调用 stats::density(df$variable)
在sparkDataframe的数字列上?
我正在调查 SparkR::spark.lapply
但我想我错过了什么。我在下面创建了一个小示例。如果有人知道如何帮助我,我会非常感激。
最好的,nf
例子:
df<- iris
gen_density_data<- function(df){
col_types<- sapply(df, class)
good_cols<- which(col_types %in% c("numeric", "integer"))
tres<- lapply(good_cols, function(x){
expr<- paste0("stats::density(df$", colnames(df)[x], ")")
eval(parse(text=expr))
})
return(tres)
}
res<- gen_density_data(df)
# And for Spark:
sdf<- SparkR::createDataFrame(iris)
gen_spark_density_data<- function(sdf){
tmp_types<- SparkR::coltypes(sdf)
good_cols_idx<- which(tmp_types %in% setdiff(tmp_types, c("character", "POSIXct", "POSIXlt", "logical")))
if(length(good_cols_idx)>=1){
tres<- SparkR::spark.lapply(good_cols_idx, function(x){
eval(parse(text=paste0("stats::density(sdf$", colnames(sdf)[x], ")")))
})
return(tres)
}
}
tst<- gen_spark_density_data(sdf=sdf) # This is where it throws errors.
1条答案
按热度按时间btxsgosb1#
我想出了一个很好的解决办法。我用
highcharter
用于绘图。我想我可以进一步改进管理数据分区的方式。目前,对于具有在最小值和最大值之间存在较大差异的列的大型数据集,这可能不是最具可伸缩性的解决方案。一些条件检查可能是正确的,但是为了得到一个例子,这是我做的。注:我采用了https://rpubs.com/mcocam12/kdf_byhand. 非常感谢马克的例子。数据:
功能:
用法:
绘图:
预期结果:
如果你有想法,我很乐意听听。
最好的,nf