SparkSQL---UDAF
package sqlspark.Day04
import java.lang
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
object UdafText05 {
def main(args: Array[String]): Unit = {
//创建sparksession
val spark: SparkSession = SparkSession.builder().appName("ipdemo2").master("local[*]").getOrCreate()
//2.创建分布式的数据集合
val number: Dataset[lang.Long] = spark.range(1, 11)
//转换为df
val numberDF: DataFrame = number.toDF()
//number.show()
//3.注册为视图
numberDF.createTempView("v_number")
//注册UDAF函数
spark.udf.register("geo",new GemMean05_1())
//sq
spark.sql("select geo(id) result from v_number").show()
spark.stop()
}
}
package sqlspark.Day04 import org.apache.spark.sql.Row
import org.apache.spark.sql.expressions.{MutableAggregationBuffer, UserDefinedAggregateFunction}
import org.apache.spark.sql.types.{DataType, DataTypes, StructField, StructType} class GemMean05_1 extends UserDefinedAggregateFunction {
//运算输入数据的类型
override def inputSchema: StructType = StructType(List(
StructField("value", DataTypes.DoubleType) )) //产生中间结果的数据类型
override def bufferSchema: StructType = StructType(List(
StructField("product", DataTypes.DoubleType),
StructField("counts", DataTypes.LongType)
)) //最终结果的数据类型
override def dataType: DataType = DataTypes.DoubleType //数据一致性
override def deterministic: Boolean = true //分区运算的初始值
override def initialize(buffer: MutableAggregationBuffer): Unit = {
//buffer(0) 存放的分区预算数据数量的初始值
//buffer(0) = 0L
buffer(0) = 1.0
//buffer(1) 存放的是分区运算乘积的初始值
// buffer(1) = 1.0
buffer(1) = 0L
} //没计算一条数据,更新中间结果
override def update(buffer: MutableAggregationBuffer, input: Row): Unit = {
//累加计算个数
// buffer(0) = buffer.getLong(0) + 1L
buffer(1) = buffer.getLong(1) + 1L
//累乘 数字
// buffer(1) =buffer.getDouble(0) * input.getDouble(0)
buffer(0) = buffer.getDouble(0) * input.getDouble(0) } //合并 将各个分区的计算结果累加和累乘
override def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = {
buffer1(0) = buffer1.getDouble(0) * buffer2.getDouble(0)
buffer1(1) = buffer1.getLong(1) + buffer2.getLong(1)
} //最终计算
override def evaluate(buffer: Row): Any = {
math.pow(buffer.getDouble(0), 1.toDouble / buffer.getLong(1))
}
}
SparkSQL---UDAF的更多相关文章
- 搭建Spark所遇过的坑
一.经验 1.Spark Streaming包含三种计算模式:nonstate .stateful .window 2.kafka可通过配置文件使用自带的zookeeper集群 3.Spark一切操作 ...
- 【Spark篇】---SparkSql之UDF函数和UDAF函数
一.前述 SparkSql中自定义函数包括UDF和UDAF UDF:一进一出 UDAF:多进一出 (联想Sum函数) 二.UDF函数 UDF:用户自定义函数,user defined functio ...
- 【Spark篇】---SparkSQL中自定义UDF和UDAF,开窗函数的应用
一.前述 SparkSQL中的UDF相当于是1进1出,UDAF相当于是多进一出,类似于聚合函数. 开窗函数一般分组取topn时常用. 二.UDF和UDAF函数 1.UDF函数 java代码: Spar ...
- SparkSQL之UDAF使用
1.创建一个类继承UserDefinedAggregateFunction类. ------------------------------------------------------------ ...
- spark-sql自定义函数UDF和UDAF
1 UDF对每个值进行处理: 2 UDAF对分组后的每个值处理(必须分组) SparkConf sparkConf = new SparkConf() .setMaster("local&q ...
- 【Spark-SQL学习之三】 UDF、UDAF、开窗函数
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- 048 SparkSQL自定义UDAF函数
一:程序 1.需求 实现一个求平均值的UDAF. 这里保留Double格式化,在完成求平均值后与系统的AVG进行对比,观察正确性. 2.SparkSQLUDFDemo程序 package com.sc ...
- 45、sparkSQL UDF&UDAF
一.UDF 1.UDF UDF:User Defined Function.用户自定义函数. 2.scala案例 package cn.spark.study.sql import org.apach ...
- Spark(十三)【SparkSQL自定义UDF/UDAF函数】
目录 一.UDF(一进一出) 二.UDAF(多近一出) spark2.X 实现方式 案例 ①继承UserDefinedAggregateFunction,实现其中的方法 ②创建函数对象,注册函数,在s ...
- 【转】Spark-Sql版本升级对应的新特性汇总
Spark-Sql版本升级对应的新特性汇总 SparkSQL的前身是Shark.由于Shark自身的不完善,2014年6月1日Reynold Xin宣布:停止对Shark的开发.SparkSQL抛弃原 ...
随机推荐
- elasicsearch数据自动清理脚本
elasticsearch随着保存的数据越来越多,磁盘占用越来越大,有必要进行定期自动清理. 直接上脚本 cat es-index-clear.sh #/bin/bash #查看索引信息 #curl ...
- sms短信服务
短信服务是app,电商类应用的基础功能.典型场景有: 用户注册,发送验证码 用户找回验证,发送验证码 用户账户异常,发送提示 用户账户变化,通知用户 短信服务开发有几个注意点: 供应商选型 短信模板 ...
- [置顶]
利用Python 提醒实验室同学值日(自动发送邮件)
前言: 在实验室里一直存在着一个问题,就是老是有人忘记提醒下一个人值日,然后值日就被迫中断了.毕竟良好的 卫生环境需要大家一起来维护的!没办法只能想出一些小对策了. 解决思路: 首先,我 ...
- 线程中断 interrupt 和 LockSupport
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之 ...
- 如何用Postman做接口自动化测试
目录 前言 什么是自动化测试 自动测试测试分类 为什么需要自动化测试 Postman自动化测试演示 1.新建集合 2.新建接口 3.填写自动化测试脚本 4.录入所有接口 5.执行自动化测试 前言 什么 ...
- springboot配置文件读取pom文件信息
解决的问题 springboot(当然别的也可以)多环境切换需要该配置文件,打包时不够方便. 解决: 配置文件能读取pom文件中的配置,根据命令选择不同配置注入springboot的配置文件中 pom ...
- vue中如何缓存一些页面
在vue中,有时候我们只想缓存页面中的一些组件或页面,这个时候怎么办呢,我们就需要用判断来加载keep-alive. 例如: // router.js { path: "/driving_l ...
- javascript输入用户名,在服务器中显示出了
## 第一个文件 pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Tra ...
- java CRC16 算法
代码摘自:https://www.cnblogs.com/lujiannt/p/9246256.html 1.CRC16算法 public class CRC16Util { /** * 计算CRC1 ...
- Python 解密JWT验证苹果登录
验证苹果登录,官方提供两种验证方法,一种是token,另一个种是code.这里使用的是token 登录流程: 苹果客户端调用苹果API,获取到用户的信息,包括: user_id 昵称 identity ...