Spark(第六节—2)Spark数据分析案例之求TopN,Spark的udf与udaf函数

本文通过一个Spark案例展示了如何利用DataFrame和sql语句求解TopN问题,同时探讨了如何实现自定义UDF和UDAF函数,包括将小写字母转为大写以及求平均值的功能。
摘要由CSDN通过智能技术生成

Spark数据分析案例之求TopN

思路

将数据读成DataFrame,并将DataFrame映射成临时表,然后用sparkSession.sql的方式用sql语句来求TopN。

数据和目标

数据是如下的json数据,可以直接读成DataFrame,求每个clazz中score的前两名

{“name”:“a”,“clazz”:1,“score”:80}
{“name”:“b”,“clazz”:1,“score”:78}
{“name”:“c”,“clazz”:1,“score”:95}
{“name”:“d”,“clazz”:2,“score”:74}
{“name”:“e”,“clazz”:2,“score”:92}
{“name”:“f”,“clazz”:3,“score”:99}
{“name”:“g”,“clazz”:3,“score”:99}
{“name”:“h”,“clazz”:3,“score”:45}
{“name”:“i”,“clazz”:3,“score”:55}
{“name”:“j”,“clazz”:3,“score”:78}

代码实现

import org.apache.spark.sql.SparkSession

object ScoreAnalysis {
   
  def main(args: Array[String]): Unit = {
   
    val sparkSession = SparkSession.builder().appName("ScoreAnalysis")
      .master("local").getOrCreate()
    val sc = sparkSession.sparkContext
    sc.setLogLevel("WARN")

    val jsonDF = sparkSession.read.json("score.txt")
    jsonDF.createOrReplaceTempView("student_score")

    sparkSession.sql("select t.name,t.clazz,t.score,t.drp from\n" +
      "(select name,clazz,score,\n" +
      "dense_rank() over(partition by clazz order by score desc ) drp\n" +
      "from student_score) t where t.drp<=2").show()

    sc.stop()
    sparkSession.close()
  }
}

Spark的udf函数

实现自定义一个udf将小写字母转为大写

import org.apache.spark.sql.SparkSession
import org.apache.s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值