转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Apache Spark 2.4 新增内置函数和高阶函数使用介绍】(https://www.iteblog.com/archives/2459.html)
Apache Spark 2.4 新增了24个内置函数和5个高阶函数,本文将对这29个函数的使用进行介绍。关于 Apache Spark 2.4 的新特性,可以参见 《Apache Spark 2.4 正式发布,重要功能详细介绍》。
文章目录
针对数组类型的函数
array_distinct
array_distinct(array<T>): array<T> :从给定数组中删除重复值。使用如下:
|
array_intersect
array_intersect(array<T>, array<T>): array<T>:返回给定两个数组元素的交集,结果已经去重了。使用如下:
|
array_union
array_union(array<T>, array<T>): array<T>:返回给定两个数组元素的并集,结果已经去重了。使用如下:
|
array_except
array_except(array<T>, array<T>): array<T>:返回只在数组1而不在数组2的元素,结果已经去重了。使用如下:
|
array_join
array_join(array<String>, String[, String]): String:使用分隔符将数组的元素进行拼接。另外,我们还可以指定可选的字符来替换 null 值。如果我们没有指定 null 值的替换字符串,那么结果中将会把 null 值替换掉。
|
array_max
array_max(array<T>): T:返回数组中的最大值, null 元素将会被忽略。
|
array_min
array_min(array<T>): T:返回数组中的最小值, null 元素将会被忽略。
|
array_position
array_position(array<T>, T): Long:返回元素 T 在数组第一次出现的位置,从1开始算。
|
array_remove
array_remove(array<T>, T): array<T>:从给定数组中删除所有与给定元素相等的元素。
|
arrays_overlap
arrays_overlap(array<T>, array<T>): array<T>:如果数组1最少包含数组2中一个非空的元素,则返回 true;如果两个数组没有公共元素,而且两个数组均为空则返回 false,如果其中任何一个数组包含 null 元素则返回 null。
|
array_sort
array_sort(array<T>): array<T>:按升序对输入数组进行排序。输入数组的元素必须是可排序的。null 元素将放置在返回数组的末尾。
|
concat
concat(String, ...): String / concat(array<T>, ...): array<T>:返回 col1,col2,...,colN 拼接的结果。此函数适用于字符串,二进制和数组。
|
flatten
flatten(array<array<T>>): array<T>:将数组的数组转换为数组。
|
array_repeat
array_repeat(T, Int): array<T>:返回包含元素计数次数的数组。
|
reverse
reverse(String): String / reverse(array<T>): array<T>:将字符串进行反转,或者将数组的元素顺序进行反转。
|
sequence
sequence(T, T[, T]): array<T>:生成从 start 到 stop(包括)的元素数组,逐步递增。返回元素的类型与参数表达式的类型相同。
|
shuffle
shuffle(array<T>): array<T>:返回给定数组的随机排列。
|
slice
slice(array<T>, Int, Int): array<T>:从 start 索引位置开始从数组中截取 length 长度的子数组;如果 start 为负数,则从后面向前截取。
|
array_zip
array_zip(array<T>, array<U>, ...): array<struct<T, U, ...>>:返回一个合并的结构数组,其中第N个结构包含输入数组的所有第N个值。
|
针对 map 类型的函数
map_form_arrays
map_form_arrays(array<K>, array<V>): map<K, V>:通过给定的 key value 数组对组合一个 map,key 不能包含 null 值。
|
map_from_entries
map_from_entries(array<struct<K, V>>): map<K, V>:从结构体中返回一个 map。
|
map_concat
map_concat(map<K, V>, ...): map<K, V>:返回多个 map 的并集。
|
针对数组和 map 类型的函数
element_at
element_at(array<T>, Int): T / element_at(map<K, V>, K): V:对于数组,返回给定索引位置(从1开始算)在对应数组里面的值;如果 index < 0,则从后往前算;如果给定的索引大于数组的长度,则返回 null。对于 map,返回给定 key 对应的值;如果 map 中不包含这个 key,则返回 null。
|
cardinality
cardinality(array<T>): Int / cardinality(map<K, V>): Int:size 的别名。返回给定数组或 map 的大小;如果数组或 map 为 null,则返回 -1。
|
高阶函数
transform
transform(array<T>, function<T, U>): array<U> 和 transform(array<T> function<T, Int, U>): array<U>:使用给定函数转换数组中的元素。如果 lambda 函数有两个参数,则第二个参数代表这个元素的索引。
|
filter
filter(array<T>, function<T, Boolean>): array<T>:使用给定的谓词过滤给定数组的元素。
|
aggregate
aggregate(array<T>, A, function<A, T, A>[, function<A, R>]): R:将二元运算符应用于初始的 state 和数组中的所有元素,并返回单个值。
|
exists
exists(array<T>, function<T, Boolean>): Boolean:判断数组里面是否有元素符合给定谓词。
|
zip_with
zip_with(array<T>, array<U>, function<T,U,R>): array<R>:使用函数将两个给定数组(按元素)合并为单个数组。 如果其中一个数组较短,则在应用函数之前,在短数组的末尾附加 null 值以匹配较长数组的长度。
|