私はsparkの世界にはかなり新しい(そしてPythonでも拡張しているが、より良い)。標準偏差を計算しようとしていて、次のコードを使用しました。次のようにSparkSQLとコードを使用して、最初は次のとおりです。RDD v/sを使った標準偏差の計算PythonのSparkSQL
sqlsd=spark.sql("SELECT STDDEV(temperature) as stdtemp from
washing").first().stdtemp
print(sqlsd)
上記正常に動作します(と思う)、私は次のコードを使用してこれRDDを実行しようとするとき、それは今6.070
として結果を提供します -
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です
私は間違って何をしていますか?私が上でやろうとしているのは、スパークデータフレームのカラム温度の標準偏差を計算し、ラムダを使うことです。助けを事前に
感謝..
'nulls'をスキップし、それらを' 0'で埋めることは同じことではありません。数値安定性の問題もある。 – zero323
ありがとう - 私は完全に同意します。 – sunny