sparkSql DataFrame操作

本文通过使用Spark SQL处理学生成绩数据,演示了如何求取各班级各科目的平均成绩,并按科目成绩排序的过程。该案例从加载数据到DataFrame转换,再到SQL风格的数据聚合操作,最后展示结果。

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

1.目的

    求每个班级每个科目的平均成绩,并按照科目成绩排序

2.素材

    dataframe.txt

class1 chinese 88
class2 chinese 76
class1 chinese 90
class2 english 56
class1 english 93
class2 chinese 68
class1 english 44
class3 english 77
class3 chinese 91
class1 english 83
class2 chinese 69
class1 english 49
class3 chinese 67
class3 english 85
missing english 65

3.代码

/**
  * Created by puwenchao on 2016-08-06.
  */
import org.apache.spark.{SparkConf,SparkContext}
import org.apache.spark.sql.SQLContext

//定义一个Classinfo格式
case class Classinfo(classid:String,subject:String,num:Int)

object dataframe{
  def main(ages:Array[String])={
    //设置运行环境
    val conf=new SparkConf().setAppName("dataframe").setMaster("local")
    val sc=new SparkContext(conf)
    val sqlc=new SQLContext(sc)
    //手动导入隐式转换
    import sqlc.implicits._

    //引入数据并转换为DataFrame
    val text=sc.textFile("e:\\dataframe.txt")
      .map{ x=>
        val row=x.split(" ")
        (Classinfo(row(0),row(1),row(2).toInt))
      }.toDF()

    //对DataFrame进行处理
    val fin=text.where($"classid"!=="missing")
      .groupBy($"classid",$"subject").agg("num"->"avg")
      .sort($"subject",$"avg(num)".desc)
      .show

    sc.stop()
  }
}

4.输出

    +-------+-------+--------+
    |classid|subject|avg(num)|
    +-------+-------+--------+
    | class1|chinese|    89.0|
    | class3|chinese|    79.0|
    | class2|chinese|    71.0|
    | class3|english|    81.0|
    | class1|english|   67.25|
    | class2|english|    56.0|
    +-------+-------+--------+

转载于:https://my.oschina.net/puwenchao/blog/729453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值