我有一个如下所示的数据集。我只需要知道如何在课堂上获得整个学生的物理标记的平均值。使用spark + scala whithout使用数据帧。
头
name|physics|biology
ram|30|40
sam|35|45
ravi|37|44
outout应该像
physics|34
提前致谢.....
答案 0 :(得分:0)
如果你有一个RDD [String]为
val rdd = sparkContext.parallelize(Seq(
("ram|30|40"),
("sam|35|45"),
("ravi|37|44")
))
然后
//split and select three columns
val average = rdd.map(_.split("\\|")).map(x => (x(0), x(1), x(2)))
//calculate the mean of third column
.map(_._2.toInt).mean()
这会给你价值34.0
或者你可以这样做
rdd.map(_.split("\\|")).map(_(1).toInt).mean()
希望这有帮助!
答案 1 :(得分:0)
您可以从Dataset
过滤出物理列,然后使用以下两种方式之一找到平均值。
//first create your dataset
case class Result(name:String,physics:Int,biology:Int)
val ds = spark.createDataset(Array(Result("ram",30,40),Result("sam",35,45),Result("ravi",37,44)))
ds.show
//+----+-------+-------+
//|name|physics|biology|
//+----+-------+-------+
//| ram| 30| 40|
//| sam| 35| 45|
//|ravi| 37| 44|
//+----+-------+-------+
现在,您可以通过一种方式过滤物理列,然后转换为RDD
并将mean
函数应用于以下内容,
ds.map(_.physics).rdd.mean
//34.0
如果您不想转换为RDD,那么您可以执行类似的操作,
val physics = ds.map(_.physics)
val avg = physics.reduce(_+_)/physics.count
//34