我是Spark世界的新手,我的问题可能不适合很多人。但是,由于我的好奇心,我无法提出这个问题。
我有非常大的数据集,500,000行和2500列。在准备这个数据集时,我观察到了巨大的性能差异,同时为R& S Spark数据帧。基本上,Spark ML比R更快。这是一篇在互联网上发现的文章,一般来说它是众所周知的。 http://bigdata-madesimple.com/tools-in-the-data-armoury-r-vs-spark/
R代码段:下面的代码在2分钟内完成
for(columnName in 1:allNumericColumns){
if(sum(is.na(dat_[,columnName])) > 0){
dat_[which_,columnName] <- 0
}
}
Spark / Scala代码段:下面的代码需要数小时(超过4小时),
dat3_.schema.fields.filter(f => f.dataType == DoubleType).map(c => {
if(dat3_.filter(col(c.name).isNull).count() > 0)
{
///****Either
dat3_ = dat3_.withColumn(c.name + "_isNull", when(col(c.name).isNull, 1).otherwise(0))
///***OR
dat3_ = dat3_.withColumn(c.name, when(col(c.name).isNull, 0).otherwise(col(c.name)))
}
})
经过研究我发现昂贵的操作是:
if(dat3_.filter(col(c.name).isNull).count() > 0)
但是,如果我只是简单地用0替换null。完成数据转换仍需要一个小时。
dat3_.schema.fields.filter(f => f.dataType == DoubleType).map(c => {
dat3_ = dat3_.withColumn(c.name, when(col(c.name).isNull, 0).otherwise(col(c.name)))
})
我仍然不清楚为什么Spark数据帧存在巨大的性能或处理问题。
如果有人有任何想法请清除我的怀疑。
答案 0 :(得分:0)
如果您没有任何云服务器可以使用并且您在本地工作,则使用spark会增加您的计算时间。请查看此视频
https://www.youtube.com/watch?v=oItFZfzqqMY&index=32&list=LLcCiCxO6SjbBzEzz7zAhNsQ&t=0s