如何使用scala规范化或标准化spark中具有多列/变量的数据?
发布时间:2020-12-16 10:05:25 所属栏目:安全 来源:网络整理
导读:我是apache spark和 scala的新手.我有这样的数据集,我从csv文件中取出并使用scala将其转换为RDD. +-----------+-----------+----------+| recent | Freq | Monitor |+-----------+-----------+----------+| 1 | 1234 | 199090|| 4 | 2553| 198613|| 6 | 3232
我是apache spark和
scala的新手.我有这样的数据集,我从csv文件中取出并使用scala将其转换为RDD.
+-----------+-----------+----------+ | recent | Freq | Monitor | +-----------+-----------+----------+ | 1 | 1234 | 199090| | 4 | 2553| 198613| | 6 | 3232 | 199090| | 1 | 8823 | 498831| | 7 | 2902 | 890000| | 8 | 7991 | 081097| | 9 | 7391 | 432370| | 12 | 6138 | 864981| | 7 | 6812 | 749821| +-----------+-----------+----------+ 我想计算z得分值或标准化数据.所以我正在计算每列的z得分,然后尝试将它们组合起来,以便得到标准比例. 这是我计算第一列z分数的代码 val scores1 = sorted.map(_.split(",")(0)).cache val count = scores.count val mean = scores.sum / count val devs = scores.map(score => (score - mean) * (score - mean)) val stddev = Math.sqrt(devs.sum / count) val zscore = sorted.map(x => math.round((x.toDouble - mean)/stddev)) 我如何计算每列?或者还有其他方法来规范化或标准化数据吗? 我的要求是指定等级(或等级). 谢谢 解决方法
如果要标准化列,可以使用Spark MLlib中的
StandardScaler类.数据应采用RDD [Vectors [Double]的形式,其中Vectors是MLlib Linalg包的一部分.您可以选择使用均值或标准差或两者来标准化数据.
import org.apache.spark.mllib.feature.StandardScaler import org.apache.spark.mllib.linalg.Vectors val data = sc.parallelize(Array( Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0))) // Converting RDD[Array] to RDD[Vectors] val features = data.map(a => Vectors.dense(a)) // Creating a Scaler model that standardizes with both mean and SD val scaler = new StandardScaler(withMean = true,withStd = true).fit(features) // Scale features using the scaler model val scaledFeatures = scaler.transform(features) 此scaledFeatures RDD包含所有列的Z分数. 希望这个答案有所帮助有关详细信息,请查看文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |