查找大型数据集的均值和标准差

Ved*_*ant 0 scala apache-spark

我在S3上有大约1500个文件(每个文件看起来像这样:)

格式:
UserId\t ItemId:得分,ItemdId:得分,ItemId:得分\n用户
ID\t ItemId:得分,ItemdId:得分,ItemId:得分\n

我把文件读成:

import scala.io.Source
val FileRead = Source.fromFile("/home/home/testdataFile1").mkString 
Run Code Online (Sandbox Code Playgroud)

这是我得到的一个例子:

1152 401368:1.006,401207:1.03
1184 401230:1.119,40049:1.11,40029:1.31

如何计算变量"得分"的平均值和标准差?

Dan*_*bos 13

虽然问题并不明确,但Apache Spark是一种以分布式方式执行此操作的好工具.我假设你已经建立了一个Spark集群.将文件读入RDD:

val lines: RDD[String] = sc.textFile("s3n://bucket/dir/*")
Run Code Online (Sandbox Code Playgroud)

以某种方式挑出"得分":

val scores: RDD[Double] = lines.map(_.split(":").last.toDouble).cache
Run Code Online (Sandbox Code Playgroud)

.cache将其保存在内存中.这样可以避免一直重新读取文件,但可以使用大量的RAM.如果你想换取RAM的速度,请将其删除.

计算指标:

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 - 1))
Run Code Online (Sandbox Code Playgroud)