我有如下数据输入数据关键数据[5、2、6、空,空)b(4、5、7、9日空,空,空)
我希望输出如下所示。输出:关键数据(6 2 5空,空)b(4、9、7、5、空,空,空)
基本上,数组中的元素需要通过在末尾保持null来反转。有人能帮我spark SQL查询吗?
我的方法-转换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(data, False)
[编辑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
)
)
)
该方法计算空值的数量,删除空值,反转数组并在数组末尾添加空值
未测试:
reverse(filter(array(0, null, 2, 3, null), x -> x IS NOT NULL))
然后添加:
filter(array(0, null, 2, 3, null), x -> x IS NULL)
看到过滤器