0

环境:

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 存在于scaled, SC.mean,SC.std

我不明白为什么StandardScaler即使在这种情况下也可以这样做mean或如何处理这种情况。任何建议表示赞赏。

镶木地板的数据大小为 1.6GiB,如果有人需要,请告诉我

更新:

打通代码,StandardScaler这很可能是聚合Double时的精度问题。MultivariateOnlineSummarizer

4

1 回答 1

1

有一个值等于Double.MaxValue,当StandardScaler对列求和时,结果溢出。

只需将这些列投射到scala.math.BigDecimal作品中。

参考这里:

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

于 2016-02-27T14:48:06.047 回答