StandardScaler返回NaN

时间:2016-02-23 09:32:20

标签: apache-spark apache-spark-ml

ENV:

spark-1.6.0 with scala-2.10.4

用法:

// row of df : DataFrame = (String,String,double,Vector) as (id1,id2,label,feature)
val df = sqlContext.read.parquet("data/Labeled.parquet")
val SC = new StandardScaler()
.setInputCol("feature").setOutputCol("scaled")
.setWithMean(false).setWithStd(true).fit(df) 


val scaled = SC.transform(df)
.drop("feature").withColumnRenamed("scaled","feature")

此处代码为http://spark.apache.org/docs/latest/ml-features.html#standardscaler

NaN存在于scaledSC.meanSC.std

我不明白为什么StandardScaler即使在mean中也可以做到这一点,或者如何处理这种情况。任何建议都表示赞赏。

数据大小为镶木地板是1.6GiB,如果有人需要它只是让我知道

更新:

完成StandardScaler的代码,这可能是Double汇总时MultivariateOnlineSummarizer的精确度问题。

1 个答案:

答案 0 :(得分:1)

谢谢@ zero323

我找到了问题:有一个值等于Double.MaxValue,当StandardScaler对列进行求和时,结果会溢出。

只需将这些列投放到scala.math.BigDecimal即可。

参考:

http://www.scala-lang.org/api/current/index.html#scala.math.BigDecimal