MLlib数据统计基本概念

本文介绍如何使用Apache Spark进行数据统计分析,包括计算数据集的平均值、标准差、相关系数等,并展示了欧几里得距离和曼哈顿距离的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备注:kimi.txt中的内容如下:
     1
     2
     3
     4
     5
一.求数据的均值和标准差
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import
org.apache.spark.{SparkConf, SparkContext}
object testVector { def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local")
.setAppName("testVector");
val sc = new SparkContext(conf);
var rdd = sc.textFile("kimi.txt")
.map(_.split(' ')
.map(_.toDouble))
.map(line => Vectors.dense(line));
var
summary = Statistics.colStats(rdd);
println(summary.mean);//计算均值
println(summary.variance);//计算标准差
}
}
程序结果:[3.0][2.5]
二.距离计算
1.欧几里得距离(normL1):指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。
2.曼哈段距离(normL2):两个点在标准坐标系上的绝对轴距总和。

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.{SparkConf, SparkContext}
object testVector {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local")
    .setAppName("testVector");
    val sc = new SparkContext(conf);
    var rdd = sc.textFile("kimi.txt")
    .map(_.split(' ')
    .map(_.toDouble))
    .map(line => Vectors.dense(line));
    var summary = Statistics.colStats(rdd);
    println(summary.normL1);
    println(summary.normL2);
  }
}
程序结果:
[15.0]
[7.416198487095663]
三.相关系数
x.txt,y.txt内容:
1 2 3 4 5
2 4 6 8 10
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.{SparkConf, SparkContext}
object testVector {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local")
    .setAppName("testVector");
    val sc = new SparkContext(conf);
    var rddX = sc.textFile("x.txt")
    .flatMap(_.split(' ')
    .map(_.toDouble));
    var rddY = sc.textFile("y.txt")
      .flatMap(_.split(' ')
        .map(_.toDouble));
    var correlation: Double = Statistics.corr(rddX,rddY);//皮尔逊相关系数 1.0
    println(correlation);
    val correlation2: Double = Statistics.corr(rddX,rddY,"spearman");//斯皮尔曼相关系数 1.0000000000000009
    println(correlation2);
  }
}
单个数据集相关系数的计算
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.{SparkConf, SparkContext}
object testVector {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local")
    .setAppName("testVector");
    val sc = new SparkContext(conf);
    var rdd = sc.textFile("x.txt")
    .map(_.split(' ')
    .map(_.toDouble))
    .map(line => Vectors.dense(line))
    println(Statistics.corr(rdd,"spearman"));
  }
}
1.0                 0.9999999999999998  0.9999999999999998  ... (5 total)
0.9999999999999998  1.0                 0.9999999999999998  ...
0.9999999999999998  0.9999999999999998  1.0                 ...
0.9999999999999998  0.9999999999999998  0.9999999999999998  ...
0.9999999999999998  0.9999999999999998  0.9999999999999998  ...

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值