我对火花世界(甚至延伸Python甚至更好)都很陌生。我正在尝试计算标准偏差并使用了以下代码。第一次使用SparkSQL,代码如下:在Python中使用RDD v/s SparkSQL计算Std偏差
sqlsd=spark.sql("SELECT STDDEV(temperature) as stdtemp from
washing").first().stdtemp
print(sqlsd)
上述工作正常(我认为),并给出结果为6.070
现在,当我试图做到这一点使用RDD用下面的代码: -
def sdTemperature(df,spark):
n=float(df.count())
m=meanTemperature(df,spark)
df=df.fillna({'_id':0,'_rev':0,'count':0,'flowrate':0,'fluidlevel':0,
'frequency':0,'hardness':0,'speed':0,'temperature':0,'ts':0,'voltage':0})
rddT=df.rdd.map(lambda r: r.temperature)
c=rddT.count()
s=rddT.map(lambda x: pow(x-m,2)).sum()
print(n,c,s)
sd=sqrt(s/c)
return sd
当我运行上面的代码时,我得到了不同的结果。我得到的价值是53.195
我在做什么错?我上面所要做的是计算火花数据帧列温度的标准偏差并使用lambda。
预先感谢帮助..
跳过'nulls'并用'0'填充它们不是一回事。还有一个数值稳定性问题。 – zero323
谢谢 - 我完全同意。 – sunny