我對火花世界(甚至延伸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