当前位置: 首页 > news >正文

SparkSQL_数组排序函数 array_sort用法详解

SparkSQL_数组排序函数 array_sort用法详解

在这里插入图片描述

官网:https://spark.apache.org/docs/latest/api/sql/index.html#array_sort

在这里插入图片描述

array_sort(expr, [func])
参数类型必须说明
exprARRAY<T>要排序的数组
funcLambda 函数 (T, T) -> INT自定义比较函数(可选)

默认排序行为(不传 func

如果不提供比较函数,array_sort 会:

  • 升序 排序
  • NULL 值排在最后
  • 对于 float/double 类型,NaN > 任何非 NaN 值

1:基本排序(升序)

SELECT array_sort(array(5, 6, 1)) AS sorted;
-- 输出: [1, 5, 6]

在这里插入图片描述


2:字符串排序(字典序)

SELECT array_sort(array('bc', 'ab', 'dc')) AS sorted;
-- 输出: ["ab", "bc", "dc"]

在这里插入图片描述


3:带 NULL 的排序

SELECT array_sort(array('b', 'd', null, 'c', 'a')) AS sorted;
-- 输出: ["a", "b", "c", "d", null]

在这里插入图片描述


自定义比较函数格式:

array_sort(array_col, (left, right) -> CASE WHEN left < right THEN -1WHEN left > right THEN 1ELSE 0END
)

比较函数返回值含义:

返回值含义
负数left < right
0left == right
正数left > right

⚠️ 如果比较函数返回 NULL,会抛出错误!


1:降序排序(数字)

SELECT array_sort(array(5, 6, 1),(left, right) -> CASE WHEN left < right THEN 1WHEN left > right THEN -1ELSE 0END
) AS sorted_desc;
-- 输出: [6, 5, 1]

在这里插入图片描述


2:字符串按长度排序(长的在前)

SELECT array_sort(array('a', 'bb', 'ccc', 'dddd'),(left, right) -> CASE WHEN length(left) < length(right) THEN 1WHEN length(left) > length(right) THEN -1ELSE 0END
) AS sorted_by_length;

在这里插入图片描述


3:字符串按字典序降序排序

SELECT array_sort(array('bc', 'ab', 'dc'),(left, right) -> CASE WHEN left < right THEN 1WHEN left > right THEN -1ELSE 0END
) AS sorted_desc;
-- 输出: ["dc", "bc", "ab"]

在这里插入图片描述


4:处理 NULL 值的自定义排序(把 NULL 放在最前面)

SELECT array_sort(array('b', 'd', null, 'c', 'a'),(left, right) -> CASE WHEN left IS NULL AND right IS NULL THEN 0WHEN left IS NULL THEN -1WHEN right IS NULL THEN 1WHEN left < right THEN -1WHEN left > right THEN 1ELSE 0END
) AS sorted_null_first;
-- 输出: [null, "a", "b", "c", "d"]

在这里插入图片描述


整理不易 多多支持呀~

http://www.dtcms.com/a/305707.html

相关文章:

  • 快秀录屏记录高光时刻,分享游戏激情
  • 少林寺用什么数据库?
  • 传统ERP迁移SAP Cloud ERP现代化升级:Kyano Crossway一种更智能的迁移方案
  • 【C++详解】深入解析多态 虚函数、虚函数重写、纯虚函数和抽象类、多态原理、重载/重写/隐藏的对⽐
  • Python字典高级映射:键到多值映射的工程实践
  • 智能Agent场景实战指南 Day 26:Agent评估与性能优化
  • SAP ABAP锁机制程序锁
  • LeetCode热题100--148. 排序链表--中等
  • Linux730 tr:-d /-s;sort:-r,-n,-R,-o,-t,-k,-u;bash;cut:-d,-c;tee -a;uniq -c -i
  • AD域设计与管理-批量创建域用户
  • 大语言模型API付费?
  • 【Qt】QTime::toString(“hh:mm:ss.zzz“) 显示乱码的原因与解决方案
  • MySQL EXPLAIN详解与高效调优方法
  • Spring-rabbit使用实战四
  • ConcurrentHashMapRedis实现二级缓存
  • 力扣219:存在重复元素Ⅱ
  • Android Animation Transitions:打造流畅的用户体验
  • 打造高效、安全的期货资管交易平台:开发流程与关键要素解析
  • VS Code中如何关闭Github Copilot
  • 为什么网站需要高防IP?高防IP的优势是什么?
  • android-PMS-创建新用户流程
  • CSS3 圆角
  • 【鸿蒙应用开发中,`signingConfigs` 用于配置应用签名的关键信息说明】
  • Vue.js 与后端技术结合开发指南
  • Python爬虫05_Requests肯德基餐厅位置爬取
  • jmeter读取上游接口并遍历数组数据并进行压测
  • Jmeter分布式测试
  • 【力扣热题100】哈希——字母异位词分组
  • Axure下拉菜单:从基础交互到高保真元件库应用
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(二)