SparkSQL内置函数(⼀)ArrayFunctions(基于Spark3.2.0)
前⾔
本⽂⾪属于专栏《1000个问题搞定⼤数据技术体系》,该专栏为笔者原创,引⽤请注明来源,不⾜和错误之处请在评论区帮忙指出,谢谢!
本专栏⽬录结构和参考⽂献请见
⽬录
正⽂
array(expr, …)
描述
返回给定元素组成的数组。
实践
SELECT array(1,2,3);
+--------------+
|array(1,2,3)|
+--------------+
|[1,2,3]|
+--------------+
array_contains(array, value)
描述
如果数组array包含指定值value,则返回true。
实践
SELECT array_contains(array(1,2,3),2);
+---------------------------------+
|array_contains(array(1,2,3),2)|
+---------------------------------+
|true|
+---------------------------------+
array_distinct(array)
描述
从数组array中去除重复的值。
实践
SELECT array_distinct(array(1,2,3,null,3));
+---------------------------------------+
|array_distinct(array(1,2,3,NULL,3))|
+---------------------------------------+
|[1,2,3,null]|
+---------------------------------------+
array_except(array1, array2)
描述
返回的数组中包含array1中的元素,但不包含array2中的元素。
没有重复元素。
实践
SELECT array_except(array(1,2,3), array(1,3,5));
+--------------------------------------------+
|array_except(array(1,2,3), array(1,3,5))|
+--------------------------------------------+
|[2]|
+--------------------------------------------+
array_interct(array1, array2)
描述
返回array1和array2 的元素交集组成的数组。
没有重复元素。
实践
SELECT array_interct(array(1,2,3), array(1,3,5));
+-----------------------------------------------+
|array_interct(array(1,2,3), array(1,3,5))|
+-----------------------------------------------+
|[1,3]|
+-----------------------------------------------+
array_join(array, delimiter[, nullReplacement])
描述
⽤指定的分隔符以及⼀个可选的⽤来取代null值的字符串,将数组 array 中所有元素串联起来。
如果 nullReplacement 未设值,则过滤掉所有的null值。
实践
SELECT array_join(array('hello','world'),' ');
+----------------------------------+
|array_join(array(hello, world),)|
+----------------------------------+
| hello world|
+----------------------------------+
SELECT array_join(array('hello',null,'world'),' ');
+----------------------------------------+
|array_join(array(hello,NULL, world),)|
数一数ppt+----------------------------------------+
| hello world|
泰宁特产
+----------------------------------------+
SELECT array_join(array('hello',null,'world'),' ',',');
+-------------------------------------------+
|array_join(array(hello,NULL, world),,,)|
+-------------------------------------------+
| hello , world|
graffle
+-------------------------------------------+
array_max(array)
描述
返回数组 array 中的最⼤值。
对于 double/float 类型,NaN⼤于任何⾮NaN元素。
null 值会被跳过。
实践
SELECT array_max(array(1,20,null,3));
+--------------------------------+
|array_max(array(1,20,NULL,3))|
+--------------------------------+
|20|
+--------------------------------+
array_min(array)
描述
返回数组 array 中的最⼩值。
对于 double/float 类型,NaN⼤于任何⾮NaN元素。
null 值会被跳过。
实践
SELECT array_min(array(1,20,null,3));
+--------------------------------+
|array_min(array(1,20,NULL,3))|
+--------------------------------+
|1|
+--------------------------------+
array_position(array, element)
描述
返回 array 中的第⼀个出现 element 的数组索引。
数组索引从 1 开始。
返回值为 long 类型。
实践
SELECT array_position(array(3,2,1),1);
+---------------------------------+
|array_position(array(3,2,1),1)|
+---------------------------------+
|3|
+---------------------------------+
array_remove(array, element)
描述
从 array 中移除等于 element的所有元素。
实践
SELECT array_remove(array(1,2,3,null,3),3);
桃花韵+----------------------------------------+
|array_remove(array(1,2,3,NULL,3),3)|
+----------------------------------------+
|[1,2,null]|
+----------------------------------------+
滑草array_repeat(element, count)
柑橘花
描述
返回元素 element 重复 count 次 的数组。
实践
SELECT array_repeat('123',2);
+--------------------+
|array_repeat(123,2)|
+--------------------+
|[123,123]|
+--------------------+
array_union(array1, array2)
描述
返回 array1 和 array2union 之后的数组。
没有重复元素。
实践
SELECT array_union(array(1,2,3), array(1,3,5));
+-------------------------------------------+
|array_union(array(1,2,3), array(1,3,5))|
+-------------------------------------------+
|[1,2,3,5]|
+-------------------------------------------+
工作交接邮件
arrays_overlap(a1, a2)
描述
如果 a1 中⾄少存在⼀个⾮空元素 也 存在于 a2 中(即 a1 和 a2 有⾮空元素重叠),则返回 true。
如果没有重叠的元素,a1 和 a2 都是⾮空的,并且 a1 或者 a2 包含⼀个null 值,那么返回 null,否则就返回 fal。实践
SELECT arrays_overlap(array(1,2,3), array(3,4,5)); +----------------------------------------------+
|arrays_overlap(array(1,2,3), array(3,4,5))|
图片女生背影
+----------------------------------------------+
|true|
+----------------------------------------------+
SELECT arrays_overlap(array(1,2,3), array(4,5,null)); +----------------------------------------------+
|arrays_overlap(array(1,2,3), array(3,4,5))|
+----------------------------------------------+
|NULL|
+----------------------------------------------+
SELECT arrays_overlap(array(1,2,3), array(4,5));
+----------------------------------------------+
|arrays_overlap(array(1,2,3), array(3,4,5))|
+----------------------------------------------+
|fal|
+----------------------------------------------+
arrays_zip(a1, a2, …)
描述
返回多个结构体合并后的新数组。
下标为 N 的结构包含下标为 N 的所有值。实践
SELECT arrays_zip(array(1,2,3), array(2,3,4));
+------------------------------------------+
|arrays_zip(array(1,2,3), array(2,3,4))|
+------------------------------------------+
|[{1,2}, {2,3},...|
+------------------------------------------+
SELECT arrays_zip(array(1,2), array(2,3), array(3,4)); +-------------------------------------------------+
|arrays_zip(array(1,2), array(2,3), array(3,4))|
+-------------------------------------------------+
|[{1,2,3}, {
+-------------------------------------------------+
flatten(arrayOfArrays)
描述
将⼀个⼆维数组转化成⼀个⼀维数组。
实践
SELECT flatten(array(array(1,2), array(3,4)));
+----------------------------------------+
|flatten(array(array(1,2), array(3,4)))|
+----------------------------------------+
|[1,2,3,4]|
+----------------------------------------+
quence(start, stop, step)
描述