第二十五记·Scala操作SparkSQL案例(自定义函数及读写CSV格式的数据)

XY个人记

SparkSQL的函数

HIve支持的函数,SparkSQL基本都是支持的,SparkSQL支持两种自定义函数,分别是:UDF和UDAF,两种函数都是通过SparkSession的udf属性进行函数的注册使用的;SparkSQL不支持UDTF函数的 自定义使用。

☆ UDF:一条数据输入,一条数据输出,一对一的函数,即普通函数

☆ UDAF:多条数据输入,一条数据输出,多对一的函数,即聚合函数

案例一

需求:对emp表中的数据进行如下操作:按照部门id进行一个排序,排序后的每组数据给定一个从1开始的序列号
解析:可以使用row——number() 进行操作

scala> spark.sql("select deptno,empno,sal from
 (select deptno,empno,sal,row_number() over (partition by deptno order by sal desc) as rnk from emp) 
as tmp where tmp.rnk <=3").show

结果:
+------+-----+------+
|deptno|empno|   sal|
+------+-----+------+
|    20| 7788|3000.0|
|    20| 7902|3000.0|
|    20| 7566|2975.0|
|    10| 7839|5000.0|
|    10| 7782|2450.0|
|    10| 7934|1300.0|
|    30| 7698|2850.0|
|    30| 7499|1600.0|
|    30| 7844|1500.0|
+------+-----+------+

案例二

需求:自定义四舍五入的UDF函数

package com.jeffrey.sql

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

import scala.util.Random

/**
  * 自定义UDF函数
  */
object UDFDemo {
    def main(args: Array[String]): Unit = {
        // 1.构建SparkSession
        val warehouseLocation = "/user/hive/warehouse"

        val spark = SparkSession
                .builder()
                .master("local")
                .appName("UDF AND UDAF")
                .config("spark.sql.warehouse.dir",warehouseLocation)
                .enableHiveSupport()
                .getOrCreate()

        // 自定义函数
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值