Ich bekomme NaN während der Berechnung der Standardabweichung (Stddev). Dies ist ein sehr einfacher Anwendungsfall, wie unten beschrieben:Spark 1.5.2: NaN während der Berechnung stddev
val df = Seq(("1",19603176695L),("2", 26438904194L),("3",29640527990L),("4",21034972928L),("5", 23975L)).toDF("v","data")
Ich habe die stddev als UDF definiert:
def stddev(col: Column) = {
sqrt(mean(col*col) - mean(col)*mean(col))
}
Ich erhalte NaN
, wenn ich die UDF nennen, wie unten dargestellt:
df.agg(stddev(col("data")).as("stddev")).show()
Es produziert die folgenden:
+------+
|stddev|
+------+
| NaN|
+------+
Was mache ich falsch?
Wie behandelt Spark 1.6 große Zahlen? Gibt es einen besseren Weg, Stddev in diesem Fall zu berechnen? – Neel
Warum funktioniert es auch, wenn man es verdoppelt? – Neel
Weil 'Double.MaxValue' ungefähr 1.79e308 ist, während' Long.MaxValue' ungefähr 9.2e18 ist. – zero323