我有一个如下所示的数据输入数据键数据a [5,2,6,空,空] b [5,7,9,4,空,空,空]我希望输出如下所示。输出:密钥数据a [6,2,5,空,空] B [4,9,7,5,空,空,空]基本上,数组中的元素需要通过在末尾保留null来反转。有人能帮我做spark SQL查询吗?
soat7uwm1#
我的方法-转换NULL进行排序,然后再转换回NULL
select transform(sort_array(transform(data, x -> coalesce(x, 0)), False), x -> case when x=0 then null else x end) from table1
[编辑]刚刚注意到,如果NULL在末尾按逆序排序,则不需要转换。sort_array()将自行工作
sort_array()
sort_array(data, False)
[EDIT 2]有人向我指出,我误解了这个问题,我相信这将工作...这是一个有点错综复杂,但是:
select concat( reverse(array_except(array(5,7,9,4,null,null,null), array(null))) , array_repeat(null , aggregate( transform(array(5,7,9,4,null,null,null), (x, i) -> (case when x is null then 1 else 0 end)) , 0, (acc, x) -> acc + x ) ) )
该方法计算空值的数量,删除空值,反转数组并在数组末尾添加空值
ubby3x7f2#
未测试:
reverse(filter(array(0, null, 2, 3, null), x -> x IS NOT NULL))
然后附加:
filter(array(0, null, 2, 3, null), x -> x IS NULL)
参见过滤器
2条答案
按热度按时间soat7uwm1#
我的方法-转换NULL进行排序,然后再转换回NULL
[编辑]
刚刚注意到,如果NULL在末尾按逆序排序,则不需要转换。
sort_array()
将自行工作[EDIT 2]
有人向我指出,我误解了这个问题,我相信这将工作...这是一个有点错综复杂,但是:
该方法计算空值的数量,删除空值,反转数组并在数组末尾添加空值
ubby3x7f2#
未测试:
然后附加:
参见过滤器