环境:
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
中也能做到这一点,也不知道如何处理这种情况。
parquet 的数据大小为1.6GiB,如果有人需要,请告诉我
最新消息:
通过StandardScaler
的代码,当MultivariateOnlineSummarizer
聚合时,这可能是Double
的精度问题。
2条答案
按热度按时间llmtgqce1#
存在等于
Double.MaxValue
的值,当StandardScaler
对列求和时,结果溢出。只需将那些列转换为
scala.math.BigDecimal
即可。请参阅此处:
http://www.scala-lang.org/api/current/index.html#scala.math.BigDecimal
pw9qyyiw2#
当遇到同样的问题时,我尝试过的一件事是在标准化过程之后,从我正在操作的两个操作系统 Dataframe 中重置索引: